ユーザーが検索アイコンをタップすると、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" />
私のメインアクティビティコードにもあります:
@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" />
新しいレイアウトを作成する代わりに、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);
....
何らかの理由で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
は、サポートライブラリによって追加された属性の単なる任意の名前空間です(詳細については、 アクション項目の追加 を参照してください)。
たぶん私は遅れていますが、それは私と同じ問題に直面した人にとって役に立つかもしれないと思った。
final SearchView searchView = (SearchView) myActionMenuItem.getActionView();
searchView.setMaxWidth(Integer.MAX_VALUE);//set search menu as full width
クラスのonCreateOptionsMenu
でこの問題を解決できますが、理解する必要があることが1つあります。 (検索ボタンをクリックして)検索メニューのみを表示し、アクションバーに他のメニュー項目を表示しない場合は、検索項目をメニューファイルの最初の項目として保持する必要があります。ここに例があります
<?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>
検索をクリックすると、全幅として表示されます
また、メニューの2番目または最後のアイテムとして検索を続けると、このように表示されます。
おかしく思えるかもしれませんが、私の場合、問題は次の行でした:menu.xmlのapp:actionViewClass = "Android.widget.SearchView":
<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" />
app: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" />
この問題を解決する方法はたくさんあります。いくつかのアプリで使用したものを追加するだけです。
Android.support.v7.widget.SearchViewを拡張し、全幅に拡大するために、カスタムSearchView(他のカスタマイズを含む)を使用しています:
@Override
public void setLayoutParams(final ViewGroup.LayoutParams params) {
params.width = ViewGroup.LayoutParams.MATCH_PARENT;
super.setLayoutParams(params);
}