【问题标题】:ICS ActionBar overflow menu item showing up on both top ActionBar and overflow menuICS ActionBar 溢出菜单项同时显示在顶部 ActionBar 和溢出菜单上
【发布时间】:2012-11-29 14:09:12
【问题描述】:

在 Galaxy S3 上,我遇到了一个问题,即 ActionBar 中的按钮配置为 showAsAction="always" 并同时显示在硬件溢出菜单和操作按钮上。我希望它不显示在硬件溢出菜单上,而只显示在操作按钮上。我可以在 onCreateOptionsMenu 中禁用菜单项,但它会隐藏两个地方的按钮。

注意事项:如果我强制显示“3 点”动作溢出菜单,刷新按钮会从硬件溢出菜单中正确隐藏,但仍不会从硬件溢出菜单中隐藏。

还有一点需要注意:如果我在 onCreateOptionsMenu 或 onPrepareOptionsMenu 中调用 menu.size(),它不会反映额外的按钮。例如,我有四个按钮,第一个按钮同时显示在操作按钮和溢出菜单中。 menu.size() 仍然返回 4 并且似乎没有意识到它显示了一个额外的按钮。

我无法发布屏幕截图,因为这是一个客户端应用程序,但这是我的 actionbar.xml 文件。刷新按钮显示在溢出和顶部的操作栏中。

actionbar.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:id="@+id/refreshmenuitem"
          android:icon="@drawable/refreshicon"
          android:title="Refresh"
          android:showAsAction="ifRoom" 
          android:visible="true"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          />
    <item android:id="@+id/helpbutton"
        android:title="Help"
        android:showAsAction="collapseActionView"
        android:icon="@drawable/ic_action_helpbutton" />
    <item android:id="@+id/settingbutton"
        android:title="Settings"
        android:icon="@drawable/ic_action_settingbutton"
        android:showAsAction="collapseActionView" />
    <item android:id="@+id/importbutton"
        android:title="Import file"
        android:icon="@drawable/ic_action_importbutton"
        android:showAsAction="collapseActionView" />
</menu>

【问题讨论】:

  • 请张贴一两个屏幕截图以帮助说明您所看到的内容。
  • 请同时发布您的菜单代码或xml

标签: android android-actionbar android-4.0-ice-cream-sandwich


【解决方案1】:

所以我想通了,但这是一种黑客行为。因此,如果您的手机(如三星 Galaxy S3)有一个硬件菜单按钮,onCreateOptionsMenu 函数实际上会被调用两次。一次是在加载 Activity 以加载应显示在右上角的任何菜单项时,另一次是在用户按下硬件菜单按钮时。我所做的只是创建一个名为 _firstTimeOnCreateOptionsMenu 的变量,在第一次使用 onCreateOptionsMenu 方法后将其设置为 false:

    public boolean onCreateOptionsMenu(Menu menu)
    {
        // Populates the actionbar/Menu
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.actionbarmenu, menu);
        boolean hardware = false;

        if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH)
        {
            hardware = ViewConfiguration.get(context).hasPermanentMenuKey();
        }

        MenuItem b1 = menu.findItem(R.id.refreshmenuitem);

        if(!hardware || _firstTimeOnCreateOptionsMenu)
        {
            b1.setVisible(true);
            _firstTimeOnCreateOptionsMenu = false;
        }
        else
        {
            b1.setVisible(false);
            _firstTimeOnCreateOptionsMenu = true;
        }
    }

希望这对遇到此问题的其他人有所帮助。

【讨论】:

    【解决方案2】:

    【讨论】:

    • 不是,但我只是尝试将其设置为 14,但仍然是同样的问题。
    【解决方案3】:

    如果这是问题,我会有点惊讶,因为您希望未知的 XML 会被忽略,但根据 documentation &lt;item&gt; 不支持 android:layout_widthandroid:layout_height

    【讨论】:

    • 是的,这不是它,但我删除了它,因为它什么也没做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-14
    • 1970-01-01
    • 2013-08-24
    相关资源
    最近更新 更多