web-dev-qa-db-fra.com

Développez et mettez l'accent sur SearchView automatiquement

Je développe une application dans laquelle l'utilisateur appuie sur l'icône "Rechercher" dans la ActionBar et une SearchView est rendue visible en haut de l'écran. 

Mon problème est que la SearchView n'est pas au point ni développée, de sorte que l'utilisateur doit appuyer sur le bouton de recherche de la Searchview pour le faire se développer et faire ressortir le clavier. 

Comment cela devrait-il être résolu?

58
SweSnow

Pour développer le SearchView développé par défaut, appelez setIconifiedByDefault(false) lors de son initialisation (par exemple, dans onCreateOptionsMenu(..) ou onPrepareOptionsMenu(..)). J'ai trouvé dans la plupart des cas que cela lui donnerait le focus automatiquement, mais sinon, appelez simplement requestFocus() dessus aussi. 

76
Alex Curran

Vous pouvez également appeler la méthode expandActionView () afin de la forcer:

@Override
public boolean onCreateOptionsMenu( Menu menu )
{
    super.onCreateOptionsMenu( menu );

    MenuItem searchMenuItem = menu.findItem( R.id.mi_search ); // get my MenuItem with placeholder submenu
    searchMenuItem.expandActionView(); // Expand the search menu item in order to show by default the query

    return true;
}

Elément de recherche dans la présentation de la barre d’actions:

<item
        Android:id="@+id/mi_search"
        Android:icon="@drawable/abs__ic_search_api_holo_light"
        Android:title="@string/search"
        Android:showAsAction="ifRoom|collapseActionView"
        Android:actionViewClass="com.actionbarsherlock.widget.SearchView"
        />
100
JavierCane

Si vous voulez l'avoir iconifiedByDefault, cela a fonctionné pour moi. setFocusable et setIconified sont nécessaires. 

    SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
    searchView.setIconifiedByDefault(true);
    searchView.setFocusable(true);
    searchView.setIconified(false);
    searchView.requestFocusFromTouch();

Mise à jour: Si vous utilisezAndroid.support.v7.widget.SearchViewle comportement nous est très différent. clearFocus est nécessaire si vous ne souhaitez pas que le clavier s'affiche tout le temps. Pour une raison quelconque, le menu est recréé tout le temps, lorsque vous utilisez appcompat.

SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
searchView.setIconified(false);
searchView.clearFocus();
46
Pascalius

Si vous l'utilisez dans la mise en page, vous pouvez appeler

mSearchView.onActionViewExpanded()

24
riwnodennyk

Cela a fonctionné pour moi: 

Dans la mise en page racine: 

xmlns:app="http://schemas.Android.com/apk/res-auto"

SearchView défini comme suit:

 <Android.support.v7.widget.SearchView
        Android:id="@+id/search_contacts"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:layout_gravity="center_horizontal"
        Android:layout_margin="15dp"
        Android:background="@drawable/search_view"        
        app:iconifiedByDefault="false"
        app:queryHint="Search name or email"
        >

        <requestFocus />
    </Android.support.v7.widget.SearchView>

La différence est avec tag app. 

app:iconifiedByDefault="false"
app:queryHint="Search name or email"
6
Parth mehta

Cela a fonctionné pour moi:

menu.expandActionView();
4
Kai Burghardt

Si vous utilisez dans une activité, vous devez utiliser

view.onActionViewExpanded();

si vous utilisez des options de menu internes, vous devez utiliser

MenuItem.expandActionView();

Remarque: cela ne fonctionne que pour SearchView 

ces deux situations sont travaillées pour moi.

4
saibaba vali

Vous pouvez utiliser la méthode SearchView#setIconified() sur un descripteur SearchView dans votre code Java. Plus ici: 

http://developer.Android.com/reference/Android/widget/SearchView.html#setIconified(boolean)

Vous pouvez également utiliser SearchView#setIconifiedByDefault(). Plus d'infos ici:

http://developer.Android.com/reference/Android/widget/SearchView.html#setIconifiedByDefault(boolean)

utilisez ceci

SearchManager searchManager = (SearchManager) mActivity.getSystemService(Context.SEARCH_SERVICE);
                SearchView searchView = new SearchView(mActivity.actionBar.getThemedContext());
                searchView.setSearchableInfo(searchManager.getSearchableInfo(mActivity.getComponentName()));
                searchView.setIconifiedByDefault(false);
                searchView.setQueryHint("Search");
                menu.findItem(R.id.action_search).setActionView(searchView);
2
manish poddar

La réponse de @ Pascalius a fonctionné pour moi. Mais chaque fois que vous fermez SearchView, et cliquez à nouveau, vous perdez le focus. J'ai donc inséré le code dans une setOnMenuItemClickListener comme ceci:

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

SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
final SearchView searchView = (SearchView) item.getActionView();

item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
    @Override
    public boolean onMenuItemClick(MenuItem menuItem) {
        searchView.setIconifiedByDefault(true);
        searchView.setFocusable(true);
        searchView.setIconified(false);
        searchView.requestFocusFromTouch();

        return false;
    }
});
1
Cesar Rodriguez

Android:iconifiedByDefault="true"

dans votre fichier xml

0
Nikhil Dinesh

J'utilise Android.widget Searchview et iconifié par défaut. Le code ci-dessous en xml m'a aidé à le développer et à l'autofocus en mode recherche, lorsque l'utilisateur clique dessus:

<SearchView
                Android:id="@+id/searchView"
                Android:layout_width="match_parent"
                Android:layout_height="wrap_content"
                Android:iconifiedByDefault="true"
                Android:focusable="true"
                Android:focusableInTouchMode="true"
                Android:queryHint="Search"/>
0
DISHA

SearchView de MenuItemCompat a une propriété nommée maxWidth.

final MenuItem searchItem = menu.findItem(R.id.action_search);
final SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
searchView.setMaxWidth(xxx);

utiliser la largeur de l'écran au lieu de xxx hors cours

0
Wops

Pour Appcompat Searchview, vous pouvez utiliser cette méthode:

MenuItemCompat.expandActionView(mSearchMenuItem);
0
Javier