Как открыть SearchView программно?


есть этот виджет для панели действий, которая называется "SearchView". Когда он не используется, он выглядит так:

и когда он используется, он выглядит так:

Я хочу (программно, конечно), чтобы открыть searchview (сделать его "в использовании").

я попробовал несколько функций, таких как:

SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
    searchView.setOnQueryTextListener(this);

    searchView.performClick();
    searchView.requestFocus();

но ни один из них не работал...

SearchView в XML:

<item android:id="@+id/menu_search"
      android:title="Search"
      android:icon="@drawable/ic_action_search"
      android:showAsAction="ifRoom|collapseActionView"
      android:actionViewClass="android.widget.SearchView" />
4 85

4 ответа:

развернуть SearchView С

searchView.setIconified(false);

и свернуть его с

searchView.setIconified(true);

вам нужно изменить значение android:showAsAction С ifRoom|collapseActionView до always. Элемент С android:iconifiedByDefault должно быть true, которое является значением по умолчанию, в противном случае пользователь не сможет свернуть SearchView после того, как он был расширен программно.

попробуйте позвонить expandActionView() на MenuItem, а не onActionViewExpanded() на ActionView.

это работает для меня.

MenuItem searchMenuItem = menu.findItem(R.id.menu_search);
searchView = (SearchView) searchMenuItem.getActionView();
searchMenuItem.expandActionView();

Если вы хотите использовать библиотеку поддержки только при необходимости, сделать это

    MenuItem searchMenuItem = menu.findItem(R.id.action_search);
    if (Utils.hasIceCreamSandwich())
        searchMenuItem.expandActionView();
    else MenuItemCompat.expandActionView(searchMenuItem);

иначе просто сделайте это

    MenuItem searchMenuItem = menu.findItem(R.id.action_search);
    MenuItemCompat.expandActionView(searchMenuItem);

Я знаю, что это поздно, но

попробуйте вызвать expandActionView (), чтобы открыть его и collapseActionView (), чтобы закрыть его. Вы можете вызвать requestFocus () на фактическом представлении действия через getActionView (), чтобы дать фокус представления поиска:)