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 继续努力~!