Android 处理物理键盘';s在SearchView中输入键

Android 处理物理键盘';s在SearchView中输入键,android,searchview,Android,Searchview,我已经在我的应用程序中实现了一个SearchView,当我在使用软键盘(使用)时按下搜索按钮时,它可以正常工作: 现在我计划使用物理键盘让我的用户能够使用应用程序,但我不知道如何从物理键盘触发搜索事件(onQueryTextChange不会被该键调用)。在Android Studio中运行模拟器时也会发生同样的情况。我试过: viewHolder.mTextSearch.setOnKeyListener(new View.OnKeyListener() { @Override

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

现在我计划使用物理键盘让我的用户能够使用应用程序,但我不知道如何从物理键盘触发搜索事件(onQueryTextChange不会被该键调用)。在Android Studio中运行模拟器时也会发生同样的情况。我试过:

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
android:imeOptions="actionSearch" 
android:inputType="text" />

}))

我就是这样处理的:

//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;
    }
});
谢谢你的帮助

另请参见:


检查EditorInfo.IME\u操作\u在EditorActionListener上完成检查此项以获取searchview-
  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;
}
//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;
    }
});