搜索查看在OptionsMenu不是全宽

问题描述 投票:33回答:6

我有一个工作搜索查看当用户点击搜索图标,其扩展在我OptionsMenu。然而,它只是其他OptionsMenu图标之间的可用空间内扩展。在宽屏幕,这是好的,但有一个狭窄的空间也只显示在搜索框中5-10 charaters房间。我希望它覆盖其他图标,如它为Android通讯录应用程序。目前,我与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" />

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

@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 searchview options-menu
6个回答
3
投票

我也有类似的问题,即搜索栏没有填写的整个宽度,(但我没有别的图标)。我解决它通过在项目中加入:

android:actionLayout="@layout/my_search_view"

在布局/ 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" />

118
投票

而不是创建一个新的布局我在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);
    ....

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

而在我的项目,我有:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:myapp="http://schemas.android.com/apk/res-auto">
    <item
        ...
        myapp:actionLayout="@layout/searchview" />
...

其中myapp仅仅是由支持库添加的属性一些任意命名空间(详见Adding Action Items)。


8
投票

也许我迟到了,但认为它可能是一个人谁面临着同样的问题,因为我有帮助。

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

在类的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>

它会显示为enter image description here

上点击搜索将被显示为全宽

enter image description here

如果你继续搜索在菜单中第二个或最后一个项目,然后它会显示这样的。

enter image description here

并点击searchenter image description here


2
投票

由于疯狂的,因为它似乎在我的情况下,问题是这一行:应用程序:actionViewClass =“android.widget.SearchView”在menu.xml文件:

 <item
        android:id="@+id/action_search"
        app:actionViewClass="android.widget.SearchView"
        android:icon="@drawable/ic_search"
        android:title="@string/title"
        app:actionLayout="@layout/layout_search"
        app:showAsAction="always" />

当我删除应用程序:actionViewClass,它完全在我layout_search文件中定义的扩展。

<android.support.v7.widget.SearchView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:maxWidth="10000dp"
android:layout_centerInParent="true"
android:background="@color/colorAccent"
android:queryHint="Search me" />

1
投票

有这么多的方法来解决这个问题 - 我只添加我在几个应用程序中使用的。

我有我的自定义搜索查看(与其他一些定制)延伸android.support.v7.widget.SearchView并以伸展到全宽:

@Override
public void setLayoutParams(final ViewGroup.LayoutParams params) {
    params.width = ViewGroup.LayoutParams.MATCH_PARENT;
    super.setLayoutParams(params);
}
© www.soinside.com 2019 - 2024. All rights reserved.