关于android:处理物理键盘在SearchView中输入密钥

Handling physical keyboard's Enter key in SearchView

我在我的应用程序中实现了一个SearchView,当我使用软键盘(使用QueryTextListener)时,当我点击搜索按钮时,它正常工作:

1
2
3
4
5
6
7
8
9
10
11
12
13
viewHolder.mTextSearch.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
    @Override
    public boolean onQueryTextSubmit(String query) {
        new SearchForEquipmentTask(false, viewHolder.mTextSearch.getQuery().toString()).execute();
        return true;
    }

    @Override
    public boolean onQueryTextChange(String newText) {
        //Log.d(TAG,"Query:" + newText);
        return false;
    }
});

enter image description here

现在我打算使用物理键盘让我的用户能够使用该应用程序,但我无法弄清楚如何从物理键盘触发搜索事件(onQueryTextChange不会被该键调用)。 当我在Android Studio中运行模拟器时,会发生同样的事情。 我试过了:

1
2
3
4
5
6
7
viewHolder.mTextSearch.setOnKeyListener(new View.OnKeyListener() {
    @Override
    public boolean onKey(View view, int i, KeyEvent keyEvent) {
        Log.d(TAG,"Query:" + keyEvent);
        return false;
    }
});

但是SearchView似乎忽略了任何键的监听器......似乎QueryTextListener是处理搜索的唯一方法,但是如何处理特殊字符呢? 我应该将它切换到更灵活的EditText吗?

任何的想法?


这就是我处理它的方式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//Grab de EditText from the SearchView
EditText editText = (EditText) viewHolder.mTextSearch
    .findViewById(android.support.v7.appcompat.R.id.search_src_text);
editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int keyAction, KeyEvent keyEvent) {
        if (
            //Soft keyboard search
                keyAction == EditorInfo.IME_ACTION_SEARCH ||
                        //Physical keyboard enter key
                        (keyEvent != null && KeyEvent.KEYCODE_ENTER == keyEvent.getKeyCode()
                                && keyEvent.getAction() == KeyEvent.ACTION_DOWN)) {
            new SearchForEquipmentTask(false, viewHolder.mTextSearch
                .getQuery().toString()).execute();
            return true;
        }
        return false;
    }
});

谢谢你的帮助!

也可以看看:

  • 从SearchView获取EditText元素
  • Android:如何让键盘输入按钮说"搜索"并处理其点击?

在布局中,将输入法选项设置为搜索。

1
2
3
<EditText
android:imeOptions="actionSearch"
android:inputType="text" />

在您的java类中添加编辑器动作侦听器。

1
2
3
4
5
6
7
8
9
  viewHolder.mTextSearch.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
    if (actionId == EditorInfo.IME_ACTION_SEARCH) {
        performSearch();
        return true;
    }
    return false;
}

});