38

ユーザーが検索アイコンをタップすると、OptionsMenu で展開される作業中の SearchView があります。ただし、他の OptionsMenu アイコンの間で使用可能なスペース内でのみ展開されます。広い画面では問題ありませんが、狭いスペースでは、検索ボックスに 5 ~ 10 文字しか表示できません。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;
}
4

6 に答える 6

144

新しいレイアウトを作成する代わりに、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);
    ....
于 2015-12-02T19:07:53.810 に答える
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によって追加された属性の任意の名前空間です (詳細については、アクション アイテムの追加を参照してください)。

于 2014-05-04T02:02:18.830 に答える
2

この問題を解決する方法はたくさんあります。いくつかのアプリで使用した方法を追加します。

android.support.v7.widget.SearchViewを拡張し、全幅に拡大するために、カスタムSearchView (他のいくつかのカスタマイズを使用) があります。

@Override
public void setLayoutParams(final ViewGroup.LayoutParams params) {
    params.width = ViewGroup.LayoutParams.MATCH_PARENT;
    super.setLayoutParams(params);
}
于 2016-08-27T12:41:04.177 に答える