在我的应用程序中,我制作了一个search interface,其中SearchView
分别在失去并获得焦点时折叠并展开。然而,失去焦点的事情只发生在两种情况下:如何使SearchView在点击其他活动时失去焦点并崩溃
当按下后退按钮。
当按下
SearchView
旁边的主图标时。
我希望它失去焦点(因此崩溃),如果用户点击,不仅在这两件事情,但其他地方在屏幕上(例如,任何按钮或屏幕看不到风景的任何空白部分在上面)。
在我的应用程序中,我制作了一个search interface,其中SearchView
分别在失去并获得焦点时折叠并展开。然而,失去焦点的事情只发生在两种情况下:如何使SearchView在点击其他活动时失去焦点并崩溃
当按下后退按钮。
当按下SearchView
旁边的主图标时。
我希望它失去焦点(因此崩溃),如果用户点击,不仅在这两件事情,但其他地方在屏幕上(例如,任何按钮或屏幕看不到风景的任何空白部分在上面)。
那么我找到了以下解决方案。我在每个不是searchview实例的视图上使用setOnTouchListener来折叠搜索视图。它对我来说非常合适。以下是代码。
public void setupUI(View view) {
if(!(view instanceof SearchView)) {
view.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
searchMenuItem.collapseActionView();
return false;
}
});
}
//If a layout container, iterate over children and seed recursion.
if (view instanceof ViewGroup) {
for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
View innerView = ((ViewGroup) view).getChildAt(i);
setupUI(innerView);
}
}
}
This是我提到的答案。
这对我的作品,mOptionsMenu保存在onCreateOptionsMenu:
public void setupUI(View view) {
//Set up touch listener for non-text box views to hide keyboard.
if(!(view instanceof EditText)) {
view.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
hideSoftKeyboard(MainActivity.this);
if(mOptionsMenu == null) return false;
MenuItem searchMenuItem = mOptionsMenu.findItem(R.id.action_search);
if(searchMenuItem == null) return false;
((SearchView)searchMenuItem.getActionView()).clearFocus();
return false;
}
});
}
//If a layout container, iterate over children and seed recursion.
if (view instanceof ViewGroup) {
for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
View innerView = ((ViewGroup) view).getChildAt(i);
setupUI(innerView);
}
}
}
public static void hideSoftKeyboard(Activity activity) {
InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);
}
大,你的答案是有用的,但现在接受它;)! – JJ86
因此,除了搜索视图外,您在层次结构中的每个视图上设置了一个触摸侦听器?如果他们已经有触摸监听器呢? – alexbirkett