我在我的应用程序中实现了一个 SearchView,当我使用软键盘(使用查询文本监听器 https://developer.android.com/reference/android/widget/SearchView.OnQueryTextListener.html):
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;
}
});
现在,我计划使用物理键盘,以便我的用户能够使用该应用程序,但我不知道如何从物理键盘触发搜索事件(不会使用该键调用 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 https://developer.android.com/reference/android/widget/EditText.html哪个更灵活?
任何想法?
我就是这样处理的:
//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 元素 https://stackoverflow.com/a/25692007/1199132
- Android:如何让键盘输入按钮说“搜索”并处理其点击? https://stackoverflow.com/questions/3205339/android-how-to-make-keyboard-enter-button-say-search-and-handle-its-click
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)