web-dev-qa-db-ja.com

検索ビューを展開して、アクションバー全体を使用します(他のものを非表示にします)

SearchViewの中にActionBarがあり、検索アイコンが押されたときにActionBar全体を使用したいのですが、使用できるのはActionBarのみですフリースペース

例: http://imgur.com/wnjMfWO

私のメニューコード:

<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
tools:context="br.com.moderna.houaiss.activity.SearchActivity" >

<item
    Android:id="@+id/search"
    Android:actionViewClass="Android.widget.SearchView"
    Android:icon="@drawable/ic_search_white_48dp"
    Android:showAsAction="collapseActionView|always"
    Android:title="@string/search"/>
<item
    Android:id="@+id/backWardHistory"
    Android:icon="@drawable/ic_arrow_back_white_48dp"
    Android:showAsAction="always"
    Android:title="@string/back_history"/>
<item
    Android:id="@+id/forWardHistory"
    Android:icon="@drawable/ic_arrow_forward_white_48dp"
    Android:showAsAction="always"
    Android:title="@string/forward_history"/>
<item
    Android:id="@+id/action_home"
    Android:orderInCategory="100"
    Android:showAsAction="never"
    Android:title="@string/action_home"/>
<item
    Android:id="@+id/action_about"
    Android:orderInCategory="100"
    Android:showAsAction="never"
    Android:title="@string/action_about"/>
<item
    Android:id="@+id/action_configuration"
    Android:orderInCategory="100"
    Android:showAsAction="never"
    Android:title="@string/action_configuration"/>
<item
    Android:id="@+id/action_logout"
    Android:orderInCategory="100"
    Android:showAsAction="never"
    Android:title="@string/action_logout"/>

試してみましたAndroid:showAsAction="ifRoom"が、メニュー内ではなく、常にActionBar上にある必要があります。

編集------

@Simasのおかげで、

この効果を達成するためにsetOnActionExpandListenerメソッドを使用しました

final MenuItem searchItem = menu.findItem(R.id.search);

    searchItem.setOnActionExpandListener(new OnActionExpandListener() {

        @Override
        public boolean onMenuItemActionExpand(final MenuItem item) {
            SearchActivity.this.setItemsVisibility(menu, searchItem, false);
            return true;
        }

        @Override
        public boolean onMenuItemActionCollapse(final MenuItem item) {
            SearchActivity.this.setItemsVisibility(menu, searchItem, true);
            return true;
        }
    });


private void setItemsVisibility(final Menu menu, final MenuItem exception,
        final boolean visible) {
    for (int i = 0; i < menu.size(); ++i) {
        MenuItem item = menu.getItem(i);
        if (item != exception)
            item.setVisible(visible);
    }
}
21
user3672263

SearchViewが展開されているときに他のすべてのアイテムを非表示にすることで、自分自身を模倣できます。

@Override
public boolean onCreateOptionsMenu(final Menu menu) {
    getMenuInflater().inflate(R.menu.menu_main, menu);

    final MenuItem searchItem = menu.findItem(R.id.search);
    SearchView searchView = (Android.widget.SearchView) searchItem.getActionView();

    // Detect SearchView icon clicks
    searchView.setOnSearchClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            setItemsVisibility(menu, searchItem, false);
        }
    });
    // Detect SearchView close
    searchView.setOnCloseListener(new SearchView.OnCloseListener() {
        @Override
        public boolean onClose() {
            setItemsVisibility(menu, searchItem, true);
            return false;
        }
    });

    return super.onCreateOptionsMenu(menu);
}

private void setItemsVisibility(Menu menu, MenuItem exception, boolean visible) {
    for (int i=0; i<menu.size(); ++i) {
        MenuItem item = menu.getItem(i);
        if (item != exception) item.setVisible(visible);
    }
}
44
Simas

これは遅い回答になりますが、この属性をメニュー項目に追加すると、作業が完了します。

app:showAsAction="collapseActionView|always"

ここでのキーワードはcollapseActionViewです。

7

このコード行を使用して、searchviewで使用可能な全幅を拡大しました。これは、アクションバーに他のアイテムが表示されている場合に機能します。

searchView.setMaxWidth(Android.R.attr.width);
5
Babak Karimi