Auto Collapse ActionBar SearchView на Soft Keyboard закрыть - PullRequest
76 голосов
/ 09 марта 2012

В настоящее время я использую пункт меню ActionBar для отображения SearchView на панели действий.При расширении пункта меню поиска отображается программная клавиатура, чего я и хочу.Теперь, когда пользователь нажимает кнопку «Назад», чтобы закрыть программную клавиатуру, я также хотел бы свернуть SearchView в панели действий.

Я попытался реализовать следующие слушатели OnKeyListener и OnFocusChangeListener на MenuItem и ActionView,Я также пытался использовать OnBackPressed () в Activity.Ничто из вышеперечисленного не обнаруживает, когда кнопка «Назад» используется для закрытия программной клавиатуры.

Есть идеи?

Я реализовал OnActionExpandListener, чтобы знать, когда SearchView виден.

Ответы [ 11 ]

0 голосов
/ 06 октября 2013
@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);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...