我已在基于search widget
的应用中实施了Android navigation drawer
。我已将其设置为打开键盘,并在单击搜索图标时对焦editText
。我想设置后退按钮(向上按钮)来隐藏键盘。我在网上搜索了向上按钮的R.id
,发现了这个android.R.id.home
。所以我把它设置为:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
...
case android.R.id.home:
hideKeyboard();
break;
...
}
我调试了代码,发现单击navigation bar
图标会激活android.R.id.home
,但点击搜索小部件的向上按钮甚至不会进入onOptionsItemSelected(MenuItem item)
功能。
我也试过这个:
searchView.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus) {
hideKeyboard();
}
}
});
但没效果。
按下后(向上)按钮时如何隐藏键盘?
设置搜索视图:
private void setSearchView(Menu menu) {
// Get the SearchView and set the searchable configuration
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
searchView = (SearchView) menu.findItem(R.id.search).getActionView();
// Assumes current activity is the searchable activity
searchView.setSearchableInfo(searchManager
.getSearchableInfo(getComponentName()));
searchView.setIconifiedByDefault(false);
SearchView.OnQueryTextListener queryTextListener = new SearchView.OnQueryTextListener() {
public boolean onQueryTextChange(String newText) {
Home.getFilter().filter(newText);
return true;
}
public boolean onQueryTextSubmit(String query) {
return true;
}
};
searchView.setOnQueryTextListener(queryTextListener);
}
答案 0 :(得分:2)
以下代码应工作:
searchView = (SearchView) menu.findItem(R.id.search).getActionView();
searchView.setOnCloseListener(new OnCloseListener() {
@Override
public bool OnClose() {
searchView.clearFocus();
return true;
});
然而,由于某些原因,这对我不起作用。 : - /
我在here下面找到了解决方法:
searchView = (SearchView) menu.findItem(R.id.search).getActionView();
searchView.addOnAttachStateChangeListener(new OnAttachStateChangeListener() {
@Override
public void onViewDetachedFromWindow(View v) {
searchView.clearFocus();
}
@Override
public void onViewAttachedToWindow(View v) {
}
});
我不认为使用android.R.id.home
会起作用,因为我认为只有在SearchView关闭后才会调用onOptionsItemSelected(android.R.id.home)
。