在 SearchView 中处理物理键盘的 Enter 键
Handling physical keyboard's Enter key in SearchView
我在我的应用程序中实现了一个 SearchView,当我在使用软键盘(使用 QueryTextListener)时按下搜索按钮时,它可以正常工作:
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 吗?
有什么想法吗?
在布局中将输入法选项设置为搜索。
<EditText
android:imeOptions="actionSearch"
android:inputType="text" />
在您的 java class 中添加编辑器动作侦听器。
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;
}
});
感谢您的帮助!
另请参阅:
- Grab the EditText element from a SearchView
- Android: how to make keyboard enter button say "Search" and handle its click?
我在我的应用程序中实现了一个 SearchView,当我在使用软键盘(使用 QueryTextListener)时按下搜索按钮时,它可以正常工作:
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 吗?
有什么想法吗?
在布局中将输入法选项设置为搜索。
<EditText
android:imeOptions="actionSearch"
android:inputType="text" />
在您的 java class 中添加编辑器动作侦听器。
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;
}
});
感谢您的帮助!
另请参阅:
- Grab the EditText element from a SearchView
- Android: how to make keyboard enter button say "Search" and handle its click?