Android EditText接收扫码枪输入,有时缺位,有时出现两次回车

最近做Android项目时,需要使用外接扫码枪扫描条码,并且接收条码输入的EditText同时还要能接收商品名称的输入,在开发调试的过程中发现,使用扫码枪时会出现条码信息丢失,或者扫码输入过程中出现两次Enter的情况。

问题1:

扫码枪扫码后,会⾃动调起系统软键盘

扫码枪相当于外接键盘,对于外接键盘不同的Android设备表现不同,⼀般我们期望外接键盘与系统键盘互斥。看⼚商是否在Framework有做过适配处理。

若要不弹出系统软键盘,可禁⽤Activity软键盘:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);

该设置会导致界面里面所有需要弹出软键盘的控件均无法显示软键盘。当我们需要清除该状态时,可以在输入控件的Touch事件里面进行解除

EditText.setOnTouchListener(new OnTouchListener() {

    @Override

    public boolean onTouch(View v, MotionEvent event) {

        // TODO Auto-generated method stub

        getWindow().clearFlags(

        WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);

        return false;

    }

});

解除禁用

getWindow().clearFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM)

问题2:

扫码枪扫码后,⾃动弹出软键盘,同时EditText显⽰内容有丢失或代码监听扫码事件,监听到的KeyEvent.getKeyCode是KeyEvent.KEYCODE_ENTER

解决办法:

由于扫码枪与系统软键盘冲突,部分数据被系统软键盘拦截,禁⽤系统软件盘可解决此问题
 

问题3:

由于扫码枪与系统软键盘冲突,部分数据被系统软键盘拦截,禁⽤可解决此问题
 

解决办法:

扫到的码最后⼀般带有回车符,导致EditText失去焦点。可给EditText配置如下next系列属性,使其下个焦点仍然指向⾃⼰

<EditText
id="@+id/scan_code"
layout_width="300px"
layout_height="100px"
textSize="20sp"
nextFocusDown="@id/scan_code"
nextFocusForward="@id/scan_code"
nextFocusLeft="@id/scan_code"
nextFocusRight="@id/scan_code"
nextFocusUp="@id/scan_code"
nextClusterForward="@id/scan_code"/>

总结:

Android设备外接扫码枪,在EditText接收扫码输入时,不同设备的表现不同,有些设备的Framework层未做外接键盘和系统键盘冲突的处理逻辑,可能会导致扫码输入信息错误的情况。

1、使用中文输入法(百度中文输入法,谷歌中文拼音输入法)中文输入方式时(搜狗输入法无此问题),使用扫码枪向EditText输入扫码信息,会出现多次回车,或者输入不完整的情况,此时可尝试将EditText的输入内容限制为Number纯数字输入,避免中文导致的问题;

2、系统软键盘和外接键盘(扫码枪实际就是一种外接键盘)冲突,导致扫码枪输入信息错误,此时可限制系统键盘弹出的方式解决;

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晒干的老咸鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值