OptionsMenu中的SearchView不是全宽

Per*_*man 36 android options-menu searchview

当用户点击搜索图标时,我有一个可在我的OptionsMenu中扩展的SearchView.但是,它仅在其他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" />
Run Code Online (Sandbox Code Playgroud)

我的主要活动代码中也有:

@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));
}
Run Code Online (Sandbox Code Playgroud)

@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;
}
Run Code Online (Sandbox Code Playgroud)

clu*_*clu 122

我没有创建新的布局,而是在onCreateOptionsMenu()中以编程方式设置MaxWidth:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.menu_search, menu);
    SearchView searchView = (SearchView)menu.findItem(R.id.menu_search).getActionView();
    searchView.setMaxWidth(Integer.MAX_VALUE);
    ....
Run Code Online (Sandbox Code Playgroud)

  • searchView.setMaxWidth(Integer.MAX_VALUE的); 解决了这个问题. (6认同)
  • android N正确显示它(可能是屏幕宽度)但是Nexus 6(棉花糖)显示出这个问题.这个解决方案适用于Nexus 6,而其他解决方案则没有 (4认同)

小智 15

出于某种原因,jjung的解决方案对我不起作用.我必须添加android:maxWidth="10000dp"一个非常高的maxWidth,以使其扩展到完整的可用宽度.

另外,只是添加,我正在使用支持库(v7),所以我的布局文件如下所示:

<android.support.v7.widget.SearchView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:maxWidth="10000dp" />
Run Code Online (Sandbox Code Playgroud)

在我的项目中,我有:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:myapp="http://schemas.android.com/apk/res-auto">
    <item
        ...
        myapp:actionLayout="@layout/searchview" />
...
Run Code Online (Sandbox Code Playgroud)

其中myapp只是支持库添加的属性的一些任意命名空间(有关详细信息,请参阅添加操作项).


Kis*_*nki 9

也许我来晚了,但认为对与我面临同样问题的人可能会有帮助。

final SearchView searchView = (SearchView) myActionMenuItem.getActionView();
searchView.setMaxWidth(Integer.MAX_VALUE);//set search menu as full width
Run Code Online (Sandbox Code Playgroud)

onCreateOptionsMenu 你的类可以解决这个问题,但我们需要有一点了解。如果只想显示搜索菜单​​(单击搜索按钮时),而不显示操作栏中的任何其他菜单项,则需要将搜索项保留为菜单文件中的第一项。这是一个例子

        <?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto">

<!--keeping searach as first item-->
        <item
            android:id="@+id/action_search"
            android:icon="@drawable/search_ab"
            android:title="@string/search"
            app:actionViewClass="android.support.v7.widget.SearchView"
            app:showAsAction="ifRoom" />

        <item
            android:id="@+id/itemFilter"
            android:icon="@drawable/filter"
            android:title="@string/filter"
            app:showAsAction="ifRoom" />
    </menu>
Run Code Online (Sandbox Code Playgroud)

它将显示为 在此处输入图片说明

点击搜索后,它将显示为全角

在此处输入图片说明

而且,如果您将搜索保留为菜单中的第二项或最后一项,则它将像这样显示。

在此处输入图片说明

然后点击搜索在此处输入图片说明


jju*_*ung 3

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

android:actionLayout="@layout/my_search_view"
Run Code Online (Sandbox Code Playgroud)

并在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" />
Run Code Online (Sandbox Code Playgroud)

  • 不起作用,只有设置 MaxWidth=10000 才会跨越视图但隐藏其他项目 (2认同)