禁用长按SearchView EditText

时间:2015-08-24 05:04:29

标签: android android-layout android-edittext android-toolbar android-search

我的SearchView上有一个Toolbar。我工作得很完美,我也没有问题。

但问题是,每当我在SearchView的EditText上写一些搜索词并长按文本时,工具栏就会转换为带有粘贴,复制等选项的上下文菜单。

enter image description here

这也发生在我的应用程序的其他EditTexts中,但我使用

解决了它
android:longClickable="false"

这会完全禁用EditTexts上的长按事件,并且不会出现上下文菜单。这是我想要的行为。

但是我如何为SearchView做同样的事情呢?我试图禁用长按ClickView,但这不起作用。

如何引用SearchView的EditText然后禁用长按事件?或者还有其他更好的方法吗?

1 个答案:

答案 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,那么我setLongClickablefalse

这里的诀窍是仅在展开SearchView时使用它,否则SearchAutoComplete视图永远不会膨胀,并且始终为空。