欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android 大屏平板获取外部扫描器读取的数据

程序员文章站 2022-06-14 20:14:04
...

前言

最近接到一个需求
用我们的大平板 外部带的扫码器 去扫客户的收钱码
实现机器出去这个流程

实现思路

接到这个需求的时候 第一想法是 在屏幕的中间 放一个输入框 来接收扫码器识别的 付款码
然后将输入框 设置和背景色一致的颜色 这样就避免 数据外漏的问题

实现步骤

利用 EditText的监听事件 来监听内容

mEtGetQRPayInfo.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                String s = v.getText().toString().trim();
                if (actionId == EditorInfo.IME_ACTION_SEND
                        || actionId == EditorInfo.IME_ACTION_DONE
                        || (event != null && KeyEvent.KEYCODE_ENTER == event.getKeyCode()
                        && KeyEvent.ACTION_DOWN == event.getAction())) {
                    if (s.length() == 18) {
                        // 使用Pattern类的compile方法,传入一个正则表达式,得到一个Pattern对象
                        Pattern p1 = Pattern.compile("^1[0-5]\\d{16}$");
                        Pattern p2 = Pattern.compile("^(?:2[5-9]|30)\\d{14,18}$");
                        // 调用pattern对象的matcher方法,传入需要匹配的字符串, 得到一个匹配器对象
                        Matcher m1 = p1.matcher(s);
                        Matcher m2 = p2.matcher(s);
                        boolean flag1 = m1.matches();
                        boolean flag2 = m2.matches();
                        if (flag1 || flag2) {
                            //通过接口传收款码
                            viewModel.paymentCode(new PaymentBean(ordersNum, s));
                        } else {
                            ToastHelper.showToastLong(PayActivity.this, "付款码有误");
                            mEtGetQRPayInfo.setText(""); //重置输入框内容
                        }
                    } else {
                        ToastHelper.showToastLong(PayActivity.this, "付款码有误");
                        mEtGetQRPayInfo.setText(""); //重置输入框内容
                    }

                }
                return true;
            }
        });

隐藏软键盘

在manifest中找到 该类 添加
android:windowSoftInputMode="stateAlwaysHidden"

   <activity
            android:name=".view.PayActivity"
            android:windowSoftInputMode="stateAlwaysHidden"
            android:launchMode="singleInstance">

方法二:

//设置输入框获取焦点时软键盘不弹出
mEtCard.setShowSoftInputOnFocus(false); //还是加上了这个方法...
mEtCard.setInputType(InputType.TYPE_NULL);

EditText 隐藏

  • 将EditText 的下划线 去掉 用@null
  • 将EditText 的最大行数 设为 1行
  • 将EditText 的最大字数 设置 18位
  • 将EditText 的字体颜色 设置和背景色一致 我这里是白色
  • 将EditText 的光标隐藏
  • View.setAlpha(0) 来让文本框透明 也可以
				android:background="@null"
                android:maxLines="1"
                android:maxLength="18"
                android:textColor="@color/white"
                android:textCursorDrawable="@null"

总结

如此,就能让扫码器输出扫描到的数据了。
2021 继续努力~!