web-dev-qa-db-fra.com

Développez la vue de recherche pour utiliser l'intégralité de la barre d'actions (masquez d'autres éléments)

J'ai un SearchView à l'intérieur de mon ActionBar, et je veux utiliser l'intégralité du ActionBar lorsque l'icône de recherche est enfoncée, mais je ne peux utiliser que le ActionBar espace libre

par exemple: http://imgur.com/wnjMfWO

mon code de menu:

<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
tools:context="br.com.moderna.houaiss.activity.SearchActivity" >

<item
    Android:id="@+id/search"
    Android:actionViewClass="Android.widget.SearchView"
    Android:icon="@drawable/ic_search_white_48dp"
    Android:showAsAction="collapseActionView|always"
    Android:title="@string/search"/>
<item
    Android:id="@+id/backWardHistory"
    Android:icon="@drawable/ic_arrow_back_white_48dp"
    Android:showAsAction="always"
    Android:title="@string/back_history"/>
<item
    Android:id="@+id/forWardHistory"
    Android:icon="@drawable/ic_arrow_forward_white_48dp"
    Android:showAsAction="always"
    Android:title="@string/forward_history"/>
<item
    Android:id="@+id/action_home"
    Android:orderInCategory="100"
    Android:showAsAction="never"
    Android:title="@string/action_home"/>
<item
    Android:id="@+id/action_about"
    Android:orderInCategory="100"
    Android:showAsAction="never"
    Android:title="@string/action_about"/>
<item
    Android:id="@+id/action_configuration"
    Android:orderInCategory="100"
    Android:showAsAction="never"
    Android:title="@string/action_configuration"/>
<item
    Android:id="@+id/action_logout"
    Android:orderInCategory="100"
    Android:showAsAction="never"
    Android:title="@string/action_logout"/>

J'avais essayé Android:showAsAction="ifRoom", mais j'ai besoin qu'ils soient toujours sur mon ActionBar, et non dans mon menu.

ÉDITER ------

Merci à @Simas,

J'ai utilisé la méthode setOnActionExpandListener pour obtenir cet effet

final MenuItem searchItem = menu.findItem(R.id.search);

    searchItem.setOnActionExpandListener(new OnActionExpandListener() {

        @Override
        public boolean onMenuItemActionExpand(final MenuItem item) {
            SearchActivity.this.setItemsVisibility(menu, searchItem, false);
            return true;
        }

        @Override
        public boolean onMenuItemActionCollapse(final MenuItem item) {
            SearchActivity.this.setItemsVisibility(menu, searchItem, true);
            return true;
        }
    });


private void setItemsVisibility(final Menu menu, final MenuItem exception,
        final boolean visible) {
    for (int i = 0; i < menu.size(); ++i) {
        MenuItem item = menu.getItem(i);
        if (item != exception)
            item.setVisible(visible);
    }
}
21
user3672263

Eh bien, vous pouvez l'imiter vous-même en masquant tous les autres éléments lorsque le SearchView est développé:

@Override
public boolean onCreateOptionsMenu(final Menu menu) {
    getMenuInflater().inflate(R.menu.menu_main, menu);

    final MenuItem searchItem = menu.findItem(R.id.search);
    SearchView searchView = (Android.widget.SearchView) searchItem.getActionView();

    // Detect SearchView icon clicks
    searchView.setOnSearchClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            setItemsVisibility(menu, searchItem, false);
        }
    });
    // Detect SearchView close
    searchView.setOnCloseListener(new SearchView.OnCloseListener() {
        @Override
        public boolean onClose() {
            setItemsVisibility(menu, searchItem, true);
            return false;
        }
    });

    return super.onCreateOptionsMenu(menu);
}

private void setItemsVisibility(Menu menu, MenuItem exception, boolean visible) {
    for (int i=0; i<menu.size(); ++i) {
        MenuItem item = menu.getItem(i);
        if (item != exception) item.setVisible(visible);
    }
}
44
Simas

Ce serait une réponse tardive, mais vous pouvez ajouter cet attribut à votre élément de menu et le travail est fait pour vous.

app:showAsAction="collapseActionView|always"

Le mot clé ici est collapseActionView.

7
PlanetAstro_William

J'ai essayé cette ligne de code pour que la vue de recherche élargisse toute la largeur disponible. Cela fonctionne lorsque d'autres éléments sont affichés dans la barre d'actions.

searchView.setMaxWidth(Android.R.attr.width);
5
Babak Karimi