web-dev-qa-db-fra.com

Comment ouvrir le SearchView par programme?

Il y a ce widget pour le ActionBar qui s'appelle 'SearchView'. Quand il n'est pas utilisé, cela ressemble à ceci:

enter image description here

Et quand il est utilisé, cela ressemble à ceci:

enter image description here

Je veux (par programme bien sûr) ouvrir le searchview (le rendre "en cours d'utilisation").

J'ai essayé plusieurs fonctions telles que:

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

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

Mais aucun de ceux qui ont travaillé ...

Le SearchView dans le 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" />
96
Eli Revah

Développez le SearchView avec

searchView.setIconified(false);

et l'effondrer avec

searchView.setIconified(true);

Vous devez changer la valeur de Android:showAsAction de ifRoom|collapseActionView à always. L'attribut SearchViewAndroid:iconifiedByDefault devrait être true, qui est la valeur par défaut, sinon l'utilisateur ne peut pas réduire le SearchView après l'avoir développé par programme.

236
Matthias Robbers

Essayez d'appeler expandActionView() sur MenuItem, pas onActionViewExpanded () sur ActionView.

Ça marche pour moi.

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

Si vous souhaitez utiliser la bibliothèque de support uniquement lorsque cela est nécessaire, procédez comme suit.

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

sinon faites-le simplement

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

Je sais qu'il est tard mais

Essayez d'appeler expandActionView () pour l'ouvrir et collapseActionView () pour le fermer. Vous pouvez appeler requestFocus () sur la vue Action réelle via getActionView () pour donner le focus à la vue de recherche :)

6
James Campbell