我正在尝试SearchView
从我的Activity
. 我尝试了以下代码:
mSearchView.setEnabled(false);
mSearchView.setFocusable(false);
mSearchView.setClickable(false);
但它不起作用。仍然可以单击 SearchView 并弹出键盘。我希望它变灰且不可点击。我怎样才能做到这一点?
我正在尝试SearchView
从我的Activity
. 我尝试了以下代码:
mSearchView.setEnabled(false);
mSearchView.setFocusable(false);
mSearchView.setClickable(false);
但它不起作用。仍然可以单击 SearchView 并弹出键盘。我希望它变灰且不可点击。我怎样才能做到这一点?
所陈述的答案都不足以满足我的需求,因此我想为处于相同情况的任何人提供另一个答案。
SearchView 由不同的 View 组成,这些 View 可以——并且在这种情况下必须——单独处理。如果您希望您的 SearchView(支持 v7)在这样的状态下冻结和变灰,不响应任何类型的输入,包括搜索和清除按钮,您可以使用:
ImageView clearButton = (ImageView) searchView.findViewById(android.support.v7.appcompat.R.id.search_close_btn);
SearchView.SearchAutoComplete searchEditText = (SearchView.SearchAutoComplete) searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);
clearButton.setEnabled(false);
searchEditText.setEnabled(false);
searchView.setSubmitButtonEnabled(false);
(此外,我遇到了 deeptis 答案的问题searchView.setInputType(InputType.TYPE_NULL)
:如果您以这种方式禁用 SearchView 并在之后单击它,系统似乎希望打开键盘,但未显示键盘。因此,第一次单击后退按钮只会关闭- 未显示或实际上未打开 - 键盘。)
要禁用任何视图(例如SearchView
),请将其设置input-type
为none
布局 XML 或view.setInputType(InputType.TYPE_NULL)
从Activity
.
您也可以完全隐藏 searchView。您可以通过执行以下操作隐藏搜索视图和搜索图标:
searchItem.setVisible(false);
searchView.setVisibility(View.GONE);
然后,您可以通过以下方式将其带回:
searchItem.setVisible(true);
searchView.setVisibility(View.VISIBLE);
要清除 SearchView 焦点:
searchView.clearFocus();
隐藏搜索视图:
searchView.setVisibility(View.GONE);
从@outta Comfort 的回答来看,这是我的解决方案:
private void enableSearchView(View view, boolean enabled) {
view.setEnabled(enabled);
if (view instanceof ViewGroup) {
ViewGroup viewGroup = (ViewGroup) view;
for (int i = 0; i < viewGroup.getChildCount(); i++) {
View child = viewGroup.getChildAt(i);
enableSearchView(child, enabled);
}
}
}
在其他地方,称之为:
enableSearchView(searchView, true/false);