当条形码扫描器读取条形码时,EditText焦点消失

时间:2016-12-05 10:36:02

标签: android android-edittext focus

我需要阅读应用程序的条形码。我正在使用触发条码扫描器。通过USB进行通信。

如您所知,条形码扫描仪的工作方式与键盘类似。当设备读取条形码时,它会尝试将值写入具有焦点的输入。并且用户按下触发器,条形码扫描器工作直到 条形码已成功读取。然后它将自己置于待机模式。阅读大量条形码的理想方式。

问题是,在用户按下触发器并读取条形码后,EditText的焦点消失。焦点将随机地转到同一布局中的另一个视图。当用户尝试再读取一个条形码时,操作失败,因为没有关注相关的EditText。

我尝试了什么?

android:windowSoftInputMode="stateAlwaysVisible"

将以上行添加到清单文件

android:focusable="true"
android:focusableInTouchMode="true"

在xml端添加了以上行。

 edtBarcode.setOnFocusChangeListener(new View.OnFocusChangeListener()
    {
        @Override
        public void onFocusChange(View v, boolean hasFocus)
        {
            if (!hasFocus)
            {
                //find the view that has focus and clear it.
                View current = getCurrentFocus();
                if (current != null)
                {
                   current.clearFocus();
                } 

                edtBarcode.requestFocus();
            }
        }
    });

它检测EditText何时失去焦点。但我不能把它归还。我确保EditText在触摸模式下可以聚焦。

我是如何解决的?

    handlerFocus = new Handler();
    final int delay = 1000; //milliseconds

    handlerFocus.postDelayed(new Runnable()
    {
        public void run()
        {
            edtBarcode.requestFocus();
            handlerFocus.postDelayed(this, delay);
        }
    }, delay);

我知道这个解决方案并不好。那么如何在不打开键盘的情况下使焦点始终保持在同一个EditText中?

4 个答案:

答案 0 :(得分:4)

当用户按下触发器时,它会触发SELECT fn FROM @t WHERE (fn LIKE 'V%[0-9]%.doc' AND SUBSTRING(fn, 2, CHARINDEX('.doc', fn) - 2) NOT LIKE '%[^0-9]%') or (fn LIKE '%[0-9]%.doc' AND REPLACE(fn, '.doc', '') NOT LIKE '%[^0-9]%') 上的KeyEvent。根据扫描仪的配置,可以是EditTextKEYCODE_TAB

所以我所做的就是倾听KEYCODE_ENTER而不是OnKeyEvent

试试这个:

OnFocusChange

希望这会有所帮助〜

答案 1 :(得分:0)

您可以尝试:edtBarcode.setSelectAllOnFocus(true);

要隐藏键盘,您可以试试这个:Close/hide the Android Soft Keyboard

我希望我能帮到你。

答案 2 :(得分:0)

试试这个: 在您的清单中

<activity android:name=".Activity.TransferBtwCenterAndStoresActivity"
            android:screenOrientation="portrait"
            android:windowSoftInputMode="stateHidden"/>

并在您的活动类中:

edtBarcode.setFocusableInTouchMode(true);
edtBarcode.requestFocus();

答案 3 :(得分:0)

在editText中设置以下提到的侦听器:

edtxt.setOnEditorActionListener(new TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int keyCode, KeyEvent event) {
            if (event != null && event.getAction() != KeyEvent.ACTION_DOWN) {
                return false;
            }
            if (keyCode == EditorInfo.IME_ACTION_DONE) {
                //this is for DONE button in soft keyboard is pressed
                //your logic
                return true;
            }
            if (keyCode != EditorInfo.IME_ACTION_NEXT && keyCode != EditorInfo.IME_NULL) {
                return false;
            }
            //your logic
            // this will be called when hardware enter button is pressed eg. barcode enter enter code here
            return true;
        }
    };)