ICS ActionBar溢出菜单项显示在顶部ActionBar和溢出菜单上

时间:2012-12-11 23:18:34

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

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

需要注意的事项:如果我强制显示“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>

3 个答案:

答案 0 :(得分:2)

所以我想出来了,但它有点像黑客。因此,如果您的手机如三星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;
        }
    }

希望这可以帮助其他任何有此问题的人。

答案 1 :(得分:0)

答案 2 :(得分:0)

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