在Android

时间:2017-01-18 17:39:52

标签: android android-toolbar

这是我的问题:

我有一个漂亮的工具栏,横向模式中的图标: enter image description here

展开搜索视图并显示弹出菜单后,添加"项目出现(我认为它不应该):

enter image description here

然后使用后退箭头键返回,如您所见,添加按钮变为:

enter image description here

你再也不会在弹出菜单中找到它了: enter image description here

我使用支持:appcompat-v7:25.1.0,这是我的菜单代码:

    <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:id="@+id/app_bar_search"
        android:actionViewClass="android.support.v7.widget.SearchView"
        android:icon="@drawable/ic_action_search"
        android:title="Search"
        app:showAsAction="always|collapseActionView"
        android:enabled="true"
        android:visible="true"
        app:actionViewClass="android.support.v7.widget.SearchView"/>
    <item android:title="Add"
        android:enabled="true"
        android:icon="@drawable/ic_action_add"
        android:visible="true"
        app:showAsAction="ifRoom"
        android:id="@+id/add" />
    <item android:title="Settings"
        android:id="@+id/settings"
        app:showAsAction="never"
        android:icon="@drawable/ic_action_settings"
        android:enabled="true"
        android:visible="true" />
    <item android:title="Feedback"
        android:id="@+id/feedbvack"
        app:showAsAction="never"
        android:icon="@drawable/ic_action_feedback"
        android:enabled="true"
        android:visible="true" />

</menu>

我可以将添加按钮showAsAction设置为&#34;始终&#34;但我知道这是沮丧的。 有谁在这里知道为什么会有这种行为?我该如何防止这种情况?

提前致谢。

4 个答案:

答案 0 :(得分:2)

试试这个

<item
    android:id="@+id/app_bar_search"
    android:actionViewClass="android.support.v7.widget.SearchView"
    android:icon="@drawable/ic_action_search"
    android:title="Search"
    app:showAsAction="always|collapseActionView"
    android:enabled="true"
    android:visible="true"
    app:actionViewClass="android.support.v7.widget.SearchView"/>
<item android:title="Add"
    android:enabled="true"
    android:icon="@drawable/ic_action_add"
    android:visible="true"
    app:showAsAction="always"
    android:id="@+id/add" />
<item android:title="Settings"
    android:id="@+id/settings"
    app:showAsAction="never"
    android:icon="@drawable/ic_action_settings"
    android:enabled="true"
    android:visible="true" />
<item android:title="Feedback"
    android:id="@+id/feedbvack"
    app:showAsAction="never"
    android:icon="@drawable/ic_action_feedback"
    android:enabled="true"
    android:visible="true" />

app:showAsAction设置为always,以确保它始终可见。

答案 1 :(得分:1)

ifRoom的使用具有此功能,如果可用空间将显示,否则它将隐藏它更好地始终使用或从不

<item android:title="Add"
    android:enabled="true"
    android:icon="@drawable/ic_action_add"
    android:visible="true"
    app:showAsAction="always"
    android:id="@+id/add" />

答案 2 :(得分:0)

你可以尝试使用它:

MenuItemCompat.setOnActionExpandListener(searchMenuItem, new MenuItemCompat.OnActionExpandListener() {
    @Override
    public boolean onMenuItemActionExpand(MenuItem item) {
        return true;
    }

    @Override
    public boolean onMenuItemActionCollapse(MenuItem item) {
        supportInvalidateOptionsMenu();
        //or use invalidateOptionsMenu();
        return true;
    }
});

因此,当SearchView将被折叠时,工具栏将重新分配项目,并且ifRoom项目将可见。我也有这个错误并以这种方式解决了。

答案 3 :(得分:0)

@Kovy 已在上面回答了此错误的修复程序,我确认它修复了该错误。非常感谢你,伙计!但是,上述函数已被弃用,而支持单个菜单项 OnActionExpandListener。示例如下:

MenuInflater menuInflater = getMenuInflater();
    menuInflater.inflate(R.menu.menu, menu);
    MenuItem searchItem = menu.findItem(R.id.action_search);
    searchItem.setOnActionExpandListener(new MenuItem.OnActionExpandListener() {
        @Override
        public boolean onMenuItemActionExpand(MenuItem item) {
            return true;
        }

        @Override
        public boolean onMenuItemActionCollapse(MenuItem item) {
            supportInvalidateOptionsMenu();
            return true;
        }
    });