展开search视图以使用整个操作栏(隐藏其他内容)

我在我的ActionBar有一个SearchView ,并且我想在按下search图标时使用整个ActionBar ,但是我只能使用ActionBar可用空间

例如: http : //imgur.com/wnjMfWO

我的菜单代码:

 <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"/> 

android:showAsAction="ifRoom" ,但我需要他们始终在我的ActionBar ,而不是我的菜单。

编辑——

感谢@Simas,

我用setOnActionExpandListener方法来达到这个效果

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

Solutions Collecting From Web of "展开search视图以使用整个操作栏(隐藏其他内容)"

那么你可以通过在SearchView展开时隐藏所有其他项来模仿:

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

这将是一个迟到的答案,但你可以添加这个属性到你的菜单项,工作是为你完成的。

 app:showAsAction="collapseActionView|always" 

这里的关键字是collapseActionView。

我试过这一行代码,使searchview展开全宽可用。 当在操作栏中显示其他项目时,这也是有效的。

 searchView.setMaxWidth(android.R.attr.width);