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

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

enter image description here

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

enter image description here

Я хочу (программно, конечно) открыть 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" />

Ответ 1

Разверните SearchView с помощью

searchView.setIconified(false);

и свернуть его с помощью

searchView.setIconified(true);

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

Ответ 2

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

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

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

Ответ 3

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

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

else просто выполните это

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

Ответ 4

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

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