我有同样的问题,我发现here我将重新进行迭代,因为解决方案并非100%完全符合我的要求:
我目前在我的应用的操作栏中有一个SearchView。当我单击搜索图标时,SearchView会展开,键盘会按预期弹出。单击SearchView框中的“X”将按预期关闭SearchView。但是,当SearchView被激活并按下“后退”按钮时,我的应用程序将退出。这是正确的行为,但我现在要做的是捕获按钮按下按钮,当SearchView可见时,让它关闭SearchView(不是我的应用程序)。有没有办法按后退按钮以编程方式调用SearchView OnCloseListener()?例如,像这样:
以下是解决方案:
@Override
public void onBackPressed() {
if (!searchView.isIconified()) {
searchView.setIconified(true);
} else {
super.onBackPressed();
}
}
问题在于解决方案要求用户按不是一次,而是两次:一次*退出键盘,** ** 关闭SearchView。< / p>
如何通过按一次来同时关闭键盘和 SearchView?
修改
Somone与EditText有类似的问题,解决方法是继承EditText视图。
答案 0 :(得分:1)
@Override
public void onBackPressed() {
if (!searchView.isIconified()) {
searchView.setIconified(true);
searchView.onActionViewCollapsed()
} else {
super.onBackPressed();
}
}
下面的方法是仅清除您的文本
searchView.setIconified(true);
下面的这种方法关闭了您的搜索视图
searchView.onActionViewCollapsed()
答案 1 :(得分:0)
尝试
@Override
public void onBackPressed() {
View view = this.getCurrentFocus();
if (view != null) {
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
if (!searchView.isIconified()) {
searchView.setIconified(true);
} else {
super.onBackPressed();
}
}
答案 2 :(得分:0)
在onBackPressed()
内添加关闭键盘的方法
这是隐藏键盘的代码。
private void hideKeyboard() {
InputMethodManager imm = (InputMethodManager)
getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(mInputField.getWindowToken(), 0);
}
答案 3 :(得分:0)
根据@Archana的回答,onBackPressed()
应该是:
@Override
public void onBackPressed() {
hideSoftKeyboard();
if (!searchView.isIconified()) {
searchView.setIconified(true);
} else {
super.onBackPressed();
}
}
private void hideSoftKeyboard(){
View view = activity.getCurrentFocus ();
if (view != null) {
InputMethodManager imm = (InputMethodManager) activity.getSystemService (Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow (view.getWindowToken (), 0);
}
}
或者您也可以覆盖onKeyDown()
@Override
public boolean onKeyDown (int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
hideSoftKeyboard ();
if (! searchView.isIconified ()) {
searchView.setIconified (true);
}
return true;
}
return super.onKeyDown (keyCode, event);
}
private void hideSoftKeyboard() {
View view = activity.getCurrentFocus ();
if (view != null) {
InputMethodManager imm = (InputMethodManager) activity.getSystemService (Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow (view.getWindowToken (), 0);
}
}
答案 4 :(得分:0)
一个有趣的答案!
@Override
public void onBackPressed() {
if (!searchView.isIconified()) {
searchView.setIconified(true);
searchView.setIconified(true);
} else {
super.onBackPressed();
}
}
答案 5 :(得分:0)
public class MainActivity extends AppCompatActivity {
MenuItem menuItemSearch;
@Override
protected void onResume() {
if(menuItemSearch!=null)
MenuItemCompat.collapseActionView(menuItemSearch); // while activity begins, searchView is closed if remained open.
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
menuItemSearch = menu.findItem(R.id.menuSearch);
}
}
答案 6 :(得分:0)
我在SearchView所在的活动中这样做了
@Override
public void onBackPressed() {
super.onBackPressed();
if (!searchView.isIconified()) {
searchView.setIconified(true);
}
}
答案 7 :(得分:0)
尝试使用clearFocus()
方法来代替手动隐藏软键盘
mSearchView.setIconified(true);
mSearchView.clearFocus();