我的SearchView
上有一个Toolbar
。我工作得很完美,我也没有问题。
但问题是,每当我在SearchView的EditText上写一些搜索词并长按文本时,工具栏就会转换为带有粘贴,复制等选项的上下文菜单。
这也发生在我的应用程序的其他EditTexts中,但我使用
解决了它android:longClickable="false"
这会完全禁用EditTexts上的长按事件,并且不会出现上下文菜单。这是我想要的行为。
但是我如何为SearchView做同样的事情呢?我试图禁用长按ClickView,但这不起作用。
如何引用SearchView的EditText然后禁用长按事件?或者还有其他更好的方法吗?
答案 0 :(得分:2)
这就是我解决它的方法。
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
SearchManager searchManager = (SearchManager) getActivity().getSystemService(Context.SEARCH_SERVICE);
searchView = (SearchView) menu.findItem(R.id.search).getActionView();
searchView.setSearchableInfo(searchManager.getSearchableInfo(getActivity().getComponentName()));
searchView.setIconifiedByDefault(true);
searchView.setQueryHint(getActivity().getString(R.string.search_files_hint));
search = menu.findItem(R.id.search);
MenuItemCompat.setOnActionExpandListener(search,
new MenuItemCompat.OnActionExpandListener() {
@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
return true; // Return true to collapse action view
}
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
// Disabling long-click on the SearchView to remove the CAB glitch
TextView searchText = (TextView) searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);
if(searchText != null){
searchText.setLongClickable(false);
}
return true; // Return true to expand action view
}
});
}
SearchView不是一个简单的视图,而是一个由大量视图组成的复合视图。
在进一步调查时,我发现它有一个SearchAutoComplete
视图,它间接地从EditText继承。
所以,我刚刚找到了它的引用,如果它不是NULL,那么我setLongClickable
到false
。
但这里的诀窍是仅在展开SearchView时使用它,否则SearchAutoComplete
视图永远不会膨胀,并且始终为空。