EditText停止关注输入键

时间:2017-11-22 16:45:27

标签: android android-layout listview android-edittext

按Enter键EditText松散焦点

和Listview的第一个项目突出显示但未发生任何事件 1)未找到ListView焦点更改
2)没有发生ItemCLick事件 并且还在滚动ListView突出显示项目消失

如何防止在Enter键上失去EditText的焦点并停止突出显示

下面是我的xml和Java代码

<EditText
android:id="@+id/et_scanitemcode"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="60"
android:background="@drawable/edittext_background"
android:gravity="right|center_vertical"
android:maxLines="1"
android:paddingLeft="5dp"
android:textColor="@drawable/edittext_color_background" />


<ListView
android:id="@+id/lst_salesScannedItems"
android:layout_width="match_parent"
android:layout_height="match_parent"/>

et_scanitemcode.setOnKeyListener(new EditText.OnKeyListener() {
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                Log.i("==>",""+KeyEvent.keyCodeToString(event.getAction()));
                Log.i("==>",""+keyCode);
                // If the event is a key-down event on the "enter" button
                //This is the filter


                if (event.getAction()==KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_ENTER) {
                    // Perform action on key press
                    String scanItemCode = et_scanitemcode.getText().toString().trim();


                    return true;
                }
                return false;
            }
        });

3 个答案:

答案 0 :(得分:1)

问题是当你按下输入焦点移动到列表视图时,你可以通过按Enter键将列表视图的焦点设置为 FALSE 来防止这种情况。

listView.setFocusable(false);

所以你的代码看起来像这样

            if (event.getAction()==KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_ENTER) {
                // Perform action on key press
                String scanItemCode = et_scanitemcode.getText().toString().trim();

                listView.setFocusable(false);
                return true;
            }

答案 1 :(得分:1)

在ACTION_DOWN之后,会触发KeyEvent.ACTION_UP,导致控件失去焦点。你必须处理这两件事。

这对我有用

@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_ENTER) {
        if (event.getAction() == KeyEvent.ACTION_DOWN){
            //your code here
        }
        return true;
    }
    return false;
}

答案 2 :(得分:1)

您可以使用setNextFocusDownId设置下一个专注于Enter和向下键的项目  具有相同的EditText视图ID(getId())。

在此示例中,条形码为EditText。

barcode.setNextFocusDownId(barcode.getId());

对我有用