У меня есть рабочий SearchView, который расширяется в моем OptionsMenu, когда пользователь нажимает на значок поиска. Однако он расширяется только в доступном пространстве среди других значков OptionsMenu. На широком экране это нормально, но при узком пространстве в поисковой строке можно показать только 5-10 символов. Я хочу, чтобы он перекрывал другие значки, например, для приложения Android Contacts. В настоящее время я строю с targetSdkVersion = 17. Надеюсь, мне не хватает чего-то простого :)
(Примечание добавлено позже: пока единственное решение, которое я нашел работоспособным, — это скрыть все значки меню, когда я хочу развернуть значок поиска. Это концептуально просто. Но это беспорядочно, потому что при восстановлении скрытых значков один должен пройти через кучу логики, чтобы выяснить, какие из них следует восстановить или сохранить переменные состояния и т. д.)
Вот мой элемент xml для 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;
}