软键盘关闭时自动折叠操作栏SearchView

79

我目前正在使用ActionBar菜单项在操作栏中显示SearchView。展开搜索菜单时,软键盘被显示出来,这正是我想要的。现在,当用户按返回按钮关闭软键盘时,我也希望折叠操作栏中的SearchView。

我尝试在MenuItem和ActionView上实现OnKeyListener和OnFocusChangeListener监听器。我还尝试在Activity中使用OnBackPressed()。但以上所有方法都无法检测到使用返回按钮关闭软键盘的情况。

有任何想法吗?

我已经实现了OnActionExpandListener以知道SearchView何时可见。


这里有一个非常受欢迎的答案:https://dev59.com/vHNA5IYBdhLWcg3wC5Xh - jmishra
2
这样做并不会帮助他,他需要拦截键盘上的返回键。 - dor506
@acrespo 什么答案?你在评论一个问题... - The incredible Jan
11个回答

0
@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getSupportMenuInflater().inflate(R.menu.home_screen, menu);

        SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        final MenuItem searchMenuItem = menu.findItem(R.id.menu_search);
        final SearchView searchView = (SearchView) searchMenuItem
                .getActionView();
        searchView.setIconifiedByDefault(false);
        if (searchManager != null && searchView != null) {
            searchView.setSearchableInfo(searchManager
                    .getSearchableInfo(getComponentName()));

            searchView
                    .setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener() {

                        @Override
                        public void onFocusChange(View v, boolean hasFocus) {

                            if (!hasFocus) {
                                if (searchMenuItem != null) {
                                    searchMenuItem.collapseActionView();
                                }// end if
                                if (searchView != null) {
                                    searchView.setQuery("", false);

                                }// end if
                            }// end if

                        }
                    });

            searchView
                    .setOnQueryTextListener(new SearchView.OnQueryTextListener() {

                        @Override
                        public boolean onQueryTextSubmit(String query) {
                            /**
                             * hides and then unhides search tab to make sure
                             * keyboard disappears when query is submitted
                             */
                            if (searchView != null) {
                                searchView.setVisibility(View.INVISIBLE);
                                searchView.setVisibility(View.VISIBLE);

                            }
                            return false;
                        }

                        @Override
                        public boolean onQueryTextChange(String newText) {
                            // TODO Auto-generated method stub
                            return false;
                        }
                    });

        }

        return super.onCreateOptionsMenu(menu);
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接