我有一个有效的SearchView,当用户点击搜索图标时,它会在我的OptionsMenu中展开。但是,它只会在其他OptionsMenu图标之间的可用空间内扩展。在宽屏幕上,这很好,但是在狭窄的空间中,搜索框中只能显示5-10个字符。我希望它可以覆盖其他图标,例如Android Contacts应用程序的图标。目前,我正在使用targetSdkVersion = 17进行构建。希望我缺少一些简单的方法:)

(请注意,稍后添加:到目前为止,我发现唯一可行的解​​决方案是在我要扩展搜索图标时隐藏所有菜单图标。从概念上讲这很简单。但这很麻烦,因为在还原隐藏的图标时,必须去掉一个图标通过一堆逻辑来找出要还原的逻辑,或保留状态变量等)

这是我用于OptionsMenu的项目xml:

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

我的主要 Activity 代码中也有:
@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;
}

最佳答案

我有一个类似的问题,搜索栏没有填满整个宽度(但是我没有其他图标)。
我通过添加项目解决了它:

android:actionLayout="@layout/my_search_view"

并在layout / my_search_view.xml中:
<?xml version="1.0" encoding="utf-8"?>
<SearchView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

07-28 01:45