gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 00:33:48 29 4
gpt4 key购买 nike

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

需要注意的一点:如果我强制显示“3 点” Action 溢出菜单,刷新按钮会从硬件溢出菜单中正确隐藏,但仍然不会从硬件溢出菜单中隐藏。

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

最佳答案

所以我弄明白了,但这有点像 hack。因此,如果您的手机(例如 Samsung 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;
}
}

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

关于android - ICS ActionBar 溢出菜单项显示在顶部 ActionBar 和溢出菜单上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13830146/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com