Android: обратный вызов для поискового виджета открыт и закрыт - PullRequest
2 голосов
/ 15 января 2010

У меня есть макет экрана, который должен быть potrait mode. Поскольку это очень сложно, у меня сейчас нет времени вкладывать деньги в создание отдельного для landscape mode. Это также не имеет особого смысла для моего типа приложения.

Однако для полей ввода лучше указывать landscape mode, потому что некоторые телефоны имеют аппаратную клавиатуру, которая автоматически выравнивает телефон в горизонтальной плоскости и поэтому затрудняет просмотр приложения, которое все еще находится в portrait mode.

Мое решение состоит в том, чтобы поместить весь ввод текста в диалог и временно включить альбомный режим (по запросу пользователя), пока диалоговое окно снова не будет закрыто.

Это работает отлично. За исключением наложения виджета поиска (при нажатии на кнопку поиска из моего приложения). Я ищу два callbacks : один, когда виджет поиска активирован (я не могу прослушать кнопку поиска, потому что иногда я поднимаю его вручную с помощью программной кнопки) и когда он снова закрывается (независимо если поиск был окончательно инициирован или отменен - ​​он должен работать в обоих случаях).

Есть предложения?

Ответы [ 2 ]

3 голосов
/ 14 декабря 2010

Существует обратный вызов Activity, когда поиск активирован. onSearchRequested()

Для отклонения / отмены виджета поиска вы можете добавить слушателей через SearchManager:

Получите ссылку на ваш SearchManager с:

context.getSystemService(Context.SEARCH_SERVICE)

см. getSystemService()

1 голос
/ 03 марта 2014

При использовании виджета поиска вы можете использовать OnActionExpandListener в пункте меню связанных панелей действий. Это также прекрасно работает с библиотекой поддержки AppCompat для версий API ниже 14.

OnActionExpandListener имеет два метода:

  • onMenuItemActionCollapse
  • onMenuItemActionExpand

См. Пример кода ниже:

SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);

    MenuItem searchItem = menu.findItem(R.id.action_search);

    MenuItemCompat.setOnActionExpandListener(searchItem, new MenuItemCompat.OnActionExpandListener(){

        @Override
        public boolean onMenuItemActionCollapse(MenuItem item) {
            KLog.i(TAG, "onMenuItemActionCollapse");
            return true;
        }

        @Override
        public boolean onMenuItemActionExpand(MenuItem item) {
            KLog.i(TAG, "onMenuItemActionExpand");
            return true;
        }

    });

    mSearchView = (SearchView) MenuItemCompat.getActionView(searchItem);

    mSearchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));

В случае, если вы не используете библиотеку поддержки, используйте OnActionExpandListener непосредственно в пункте меню.

...