android 外接扫码枪_Android 扫码枪以及焦点的处理
这次写的业务中正好包括了扫码枪的内容,借这个机会记录一下扫码枪要怎么处理,还有焦点问题。
首先扫码枪其实是直接录入Edittext的,并且是一个一个字母/数字录入的。那么我们首先要有一个能够录入内容的Edittext:
android:id="@+id/et_scanCodeInput"
android:layout_width="1dp"
android:layout_height="1dp"
android:focusable="true"
android:focusableInTouchMode="true" />
宽高要设置为1dp,如果为0实测会有问题,不确定是不是因为框直接没了就无法录入了。
然后在onResume中etScanCodeInput.requestFocus(),让我们的输入框获取到焦点。一.干掉输入法
在init的时候发现,如果Edittext设置了焦点,输入框就必然会弹出来,这样的体验实在不佳,必须要干掉。
这时我们就要用到setShowSoftInputOnFocus
, 但是这个方法是隐藏的,必须要通过反射的方法来调用。this.getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
try {
Class cls = EditText.class;
Method setShowSoftInputOnFocus;
setShowSoftInputOnFocus = cls.getMethod("setShowSoftInputOnFocus",
boolean.class);
setShowSoftInputOnFocus.setAccessible(true);
setShowSoftInputOnFocus.invoke(etScanCodeInput, false);
} catch (Exception e) {
e.printStackTrace();
}二.获取扫码枪内容etScanCodeInput.addTextChangedListener(inputTextWatcher);
private final TextWatcher inputTextWatcher = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
String code = editable.toString();
Log.e("code", code + ",length:" + code.length());
if (code.endsWith("\n") && code.length() > 5) {
String scanCode = "";
scanCode = code.substring(0, code.length() - 1);
Log.e("scanCode", "scanCode:" + scanCode);
for (MenuItem orderItem : menuItemLists) {
if (scanCode.equals(orderItem.SKU)) {
ExtOrderBean extOrderBean = new ExtOrderBean();
extOrderBean.goodsName = orderItem.goodsName;
extOrderBean.goodsRemake = orderItem.goodsRemake;
extOrderBean.goodsPrice = orderItem.goodsPrice;
extOrderBean.goodsWeight = 1;
extOrderBean.goodsAmount = orderItem.goodsAmount;
extOrderBean.goodsPluType = 2;
extOrderBean.gCode = orderItem.gCode;
extOrderBean.pluID = orderItem.pluID;
extOrderBean.displayMode = orderItem.displayMode;
extOrderBean.displayName = orderItem.displayName;
Log.e("MainActivity", "扫到内容:" + orderItem.goodsName);
IscaleSDKManager.getInstance().getSupportUdpManager().addOrderToService(extOrderBean);
}
}
etScanCodeInput.setText("");
}
}
};
根据扫码枪给到的"\n"标志或者固定长度来判断扫码成功,截取获得到的内容。三.多个Edittext焦点处理
在多个Edittext的时候,当第二个Edittext获取了焦点,会导致我们扫码枪用的Edittext失去焦点,并且无法再次获得,必须要进行一些处理。
首先是在dispatchTouchEvent中移除第二个Edittext的焦点,然后模拟手动点击第一个Edittext。@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
etCode.clearFocus();
etScanCodeInput.requestFocus();
etScanCodeInput.callOnClick();
return super.dispatchTouchEvent(ev);
}
这样我们只要点击任意空白处就会直接移除第二个Edittext的焦点,并且让我们扫码枪对应的输入框直接获得焦点,让用户无感继续使用扫码枪。
android 外接扫码枪_Android 扫码枪以及焦点的处理相关推荐
- android edittext自动获取焦点,Android取消EditText自动获取默认焦点
Android取消EditText自动获取默认焦点 发布时间:2020-10-02 14:08:30 来源:脚本之家 阅读:142 作者:ganchuanpu 最近在通讯录新建联系人=中,一进入一个页 ...
- android tv key事件,Android TV中按键事件和焦点处理总结
本文总结了Android TV开发中的按键事件和焦点处理,TV端的开发不同于手机开发,主要区别在于焦点的处理,常常会用到手机端很少用到的开发接口.了解这些不同的接口和区别,有助于很快的上手TV端的开发 ...
- Android TV中按键事件和焦点处理总结
本文总结了Android TV开发中的按键事件和焦点处理,TV端的开发不同于手机开发,主要区别在于焦点的处理,常常会用到手机端很少用到的开发接口.了解这些不同的接口和区别,有助于很快的上手TV端的开发 ...
- android 外接扫码枪_Android手机(设备)连接扫描枪扫码遇到的问题
以下内容以我发布前的时间为准,可能之后厂商给设备改进后都没有这些问题. 1.android手机连接扫描枪有些手机显示不了系统键盘 2.连接扫描枪使用的是百度输入法,条码是字母数字组合的扫码会出现乱码( ...
- Android设备获取USB扫码枪扫描的内容与可能遇到的问题解决
这篇文章主要给大家介绍了关于Android设备获取扫码枪扫描内容的方法,以及在开发中可能会遇到的问题的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们 ...
- Android BLE 蓝牙开发-扫码枪集成
一.蓝牙模式HID与BLE 当扫码枪与手机连接时,通常采用的是蓝牙HID(Human Interface Device)模式.本质上是一个把扫码枪作为一个硬件键盘,按照键盘协议把扫码后的结果逐个输入到 ...
- android释放焦点_Android videoview抢占焦点的处理方法
问题描述: android 机顶盒应用: 应用程序主界面(MainActivity)只有两个控件,一个videoview和一个button. 视频框设置无焦点,按键有焦点. 首次进入应用时焦点正常,聚 ...
- 基于Android开发的手持扫码枪APP(附带参考源码)
扫码枪扫码效果等同于键盘录入,会回调dispatchKeyEvent键盘按下事件. 开发环境:有线扫码枪,支持二维码 文件:url80.ctfile.com/f/25127180-740368576- ...
- android释放焦点_android 取消edittext焦点
页面中如果有EditText会默认获取焦点,如果进入页面时不想让其获取到焦点可以按如下步骤: 1.在布局的最外层添加属性: android:focusable="true" and ...
- android中设置控件获得焦点 (转)
android中,要使控件获得焦点,需要先setFocus,再requestFocus. 以Button为例: btn.setFocusable(true); ...
最新文章
- R语言ggplot2可视化:可视化堆叠的直方图、添加每个分组的每个bin的计数标签、在堆叠直方图的bin中的每个分组部分添加数值标签
- java开发经验分享_java开发经验分享(一)
- Taro+react开发(29)引入固定地址的方式
- 信息学奥赛一本通(1007:计算(a+b)×c的值)
- 61组第二次团队作业
- 如何MATLAB中将一个向量或者矩阵强行转换为列向量
- WPF 添加阴影效果
- 蓝牙耳机出口欧盟要做什么CE的哪些指令?
- 网络调试助手无法连接tcp服务器,W5500 TCP 客户端网络调试助手连不上
- 人力资源术语英汉对照(zt)
- c语言二维数组学习,C语言学习之二维数组的传参
- 为什么不建议在外包公司长期工作及外包公司的简历怎么写
- Spring Boot 中的 HttpClient 新贵 Retrofit !
- 华为nova7se怎么看云相册_华为nova7SE拍照怎么样?华为nova7SE夜拍照效果如何
- 「Tracup」一款拒绝加班的项目管理工具
- java hypot_java – 为什么hypot()函数这么慢?
- SGI STL的rb_tree浅析
- 正交设计 python算法_Python实现正交实验法-高级篇
- c语言引入指针的目的,指针,C语言指针完全攻略
- 人人都能懂的图灵机原理