【问题标题】:Toolbar icons disappearing after expanding the SearchView in Android在 Android 中展开 SearchView 后工具栏图标消失
【发布时间】:2017-01-18 17:39:52
【问题描述】:

这是我的问题:

我有一个带有横向模式图标的漂亮工具栏:

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

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

您将不会再在弹出菜单中找到它:

我正在使用 support: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 设置为“始终”,但我知道不鼓励这样做。 这里有谁知道为什么会有这种行为?我该如何预防?

提前致谢。

【问题讨论】:

    标签: android android-toolbar


    【解决方案1】:

    你可以试试这个:

    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 项目将可见。我也有这个bug,就这样解决了。

    【讨论】:

      【解决方案2】:

      @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;
              }
          });
      

      【讨论】:

        【解决方案3】:

        试试这个

        <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 以确保它始终可见。

        【讨论】:

        • 问题是,我不想一直显示它,如果空间有限(例如:小型设备中的纵向模式),我希望将它发送到弹出菜单。跨度>
        【解决方案4】:

        使用 ifRoom 具有此功能,如果可用空间将显示,否则它将隐藏它更好地使用或永远使用

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

        【讨论】:

        • 是的,我只是想知道为什么按后退键后图标消失了?
        • 但最终没有“添加”选项,工具栏和弹出菜单中都没有?
        • 在内部计算空间你有三个选项 1.never 2.always 3.ifRoom
        • 使用总是会强制工具栏每次都显示菜单项
        • 我知道,我用它只是为了防止在空间有限时显示图标,但我想我会接受你的解决方案并使用“总是”。谢谢!
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-16
        • 1970-01-01
        • 2015-10-07
        • 1970-01-01
        • 1970-01-01
        • 2015-11-21
        相关资源
        最近更新 更多