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);
}
}
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);
}
}
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.
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);