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



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

需要注意的是:如果我强制显示"3点"操作溢出菜单,刷新按钮将从硬件溢出菜单中正确隐藏,但仍然不会从硬件溢出列表中隐藏。

需要注意的是:如果我在onCreateOptionsMenu或onPrepareOptionsMenu中调用menu.size(),它不会反映额外的按钮。例如,我有四个按钮,第一个按钮同时显示在Action按钮和溢出菜单中。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>

所以我想明白了,但这有点像黑客。因此,如果你有一部手机,比如三星Galaxy S3,它有一个硬件菜单按钮,onCreateOptionsMenu功能实际上会被调用两次。一次用于加载"活动"时加载应显示在右上角的任何菜单项,另一次用于用户按下硬件菜单按钮时。我所做的只是创建一个名为_firstTimeOnCreateOptionsMenu的变量,该变量在第一次使用CreateOptionsMnu方法后设置为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;
}
}

希望这能帮助到其他有这个问题的人。

您的targetSdkVersion是否设置为14?

http://android-developers.blogspot.com/2012/01/say-goodbye-to-menu-button.html

如果这是一个问题,我会有点惊讶,因为您可能会忽略未知的XML,但根据文档<item>不支持android:layout_widthandroid:layout_height

最新更新