10

アクション バーの検索インターフェイスを使用する場合、縦向きモードではウィジェットが拡大して画面の全幅を占有しますが、横向きモードでは手前で停止します。

ユーザーが検索を入力しているときにアクション バーを完全に埋めるように、SearchView の拡張レイアウト パラメータを設定する方法はありますか?

画像を参照してください:

ランドスケープ モードで全幅を使用しない SearchView テキスト フィールド

注: 現在、ActionBar Sherlock は使用していません。

編集:全幅を拡張するために私がしたことは次のとおりです。

searchView.setOnSearchClickListener(new OnClickListener() {
    private boolean extended = false;

    @Override
    public void onClick(View v) {
        if (!extended) {
            extended = true;
            LayoutParams lp = v.getLayoutParams();
            lp.width = LayoutParams.MATCH_PARENT;
        }
    }

});
4

6 に答える 6

17

MenuItemCompat の SearchView には、maxWidth という名前のプロパティがあります。

    final MenuItem searchItem = menu.findItem(R.id.action_search);
    final SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
    searchView.setMaxWidth(xxx);

xxx offcourse の代わりに画面幅を使用する

于 2015-07-30T11:26:43.167 に答える
0

ActionBarCompat の場合、これを使用します。

    MenuItemCompat.setShowAsAction(searchItem, MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW
            | MenuItem.SHOW_AS_ACTION_ALWAYS);
    MenuItemCompat.expandActionView(searchItem);
于 2014-09-19T17:01:55.633 に答える
0

検索ビューをランドスケープで完全に展開し、アクティビティの作成時にアクション ビューを既に展開するためのソリューションを見つけました。ここでそれがどのように機能するか:

1.まず、res-menu フォルダーに xml ファイルを作成します (例: searchview_in_menu.xml)。ここでは、次のコードがあります。

    <?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:android="http://schemas.android.com/apk/res/android" >
        <item android:id="@+id/action_search"
              android:title="@string/search"
              android:icon="@android:drawable/ic_menu_search"
              android:actionLayout="@layout/searchview_layout" />
    </menu>

注: "@string/search" - res-strings.xml では次のようになります。

    <string name="search">Search</string>

2.次に、上記のレイアウト (「@layout/searchview_layout」) を res-layout フォルダーに作成します。新しいレイアウト: searchview_layout.xml は次のようになります。

    <?xml version="1.0" encoding="utf-8"?>
    <SearchView xmlns:android="http://schemas.android.com/apk/res/android"
      android:id="@+id/search_view_layout"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"/>

注: ここでは、親の幅と一致するように検索ビューの幅を設定しています (android:layout_width="match_parent")

3. MainActivity クラスまたは検索ビューを実装する必要があるアクティビティで、 onCreateOptionsMenu() メソッドに次のコードを記述します。

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.searchview_in_menu, menu);
        //find the search view item and inflate it in the menu layout
        MenuItem searchItem = menu.findItem(R.id.action_search);
        mSearchView = (SearchView) searchItem.getActionView();
        //set a hint on the search view (optional)
        mSearchView.setQueryHint(getString(R.string.search));
        //these flags together with the search view layout expand the search view in the landscape mode
        searchItem.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW
                | MenuItem.SHOW_AS_ACTION_ALWAYS);
        //expand the search view when entering the activity(optional)
        searchItem.expandActionView();
        return true;
}
于 2014-03-22T21:42:44.577 に答える