У меня есть рабочий SearchView, который расширяется в моем OptionsMenu, когда пользователь нажимает на значок поиска. Однако он только расширяется в пределах доступного пространства среди других значков OptionsMenu. На широком экране это прекрасно, но с узким пространством есть только место, чтобы показать 5-10 символов в окне поиска. Я хочу, чтобы он накладывал другие значки, например, для приложения Android Contacts. В настоящее время я строю с targetSdkVersion = 17. Надеюсь, я пропустил что-то простое:)
(Примечание добавлено позже: единственное решение, которое я нашел работоспособным до сих пор, - это скрыть все значки меню, когда я хочу развернуть значок поиска. Это концептуально просто. Но это грязно, потому что при восстановлении скрытых значков один должен пройти через кучу логики, чтобы выяснить, какие из них нужно восстановить или сохранить переменные состояния и т.д.)
Здесь мой элемент xml in для OptionsMenu:
<item
android:id="@+id/menu_search_shallow"
android:title="Search Current Folder"
android:icon="@drawable/ic_btn_search"
android:showAsAction="always|collapseActionView"
android:actionViewClass="android.widget.SearchView" />
У меня также есть мой основной код активности:
@Override
public boolean onCreateOptionsMenu (Menu menu)
{
getMenuInflater().inflate(R.menu.nav_menu, menu);
this.optionsMenu = menu;
MenuItem searchItem = menu.findItem (R.id.menu_search_shallow);
searchItem.setOnActionExpandListener (this);
SearchView searchView = (SearchView) searchItem.getActionView();
searchView.setQueryHint (getString (R.string.search_shallow_hint));
searchItem = menu.findItem (R.id.menu_search_deep);
searchItem.setOnActionExpandListener (this);
searchView = (SearchView) searchItem.getActionView();
searchView.setQueryHint (getString (R.string.search_deep_hint));
}
и
@Override
public boolean onMenuItemActionExpand(MenuItem item)
{
SearchView searchView = (SearchView) item.getActionView();
searchView.setOnQueryTextListener (this);
return true;
}
@Override
public boolean onMenuItemActionCollapse(MenuItem item)
{
SearchView searchView = (SearchView) item.getActionView();
searchView.setQuery ("", false);
return true;
}