溢出菜单图标未显示
Overflow menu icon is not showing
在下面的menu.xml中,我试图在溢出菜单图标中显示menu_exit
,所以如下图我设置了它的showAsAction="never"
,但是当我运行 应用程序,溢出菜单未显示。
我的问题是:
- 如何在溢出菜单中放置 menu.xml
menu_exit
的最后一项?
- menu.xml中的第3项,当它被禁用时,显示在
settings menu
(设备左下角的按钮)中,而我想要的是,当它被禁用时它不应出现在任何地方,仅在启用时出现在 ActionBar
上。
menu.xml:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/menu_refresh"
android:orderInCategory="1"
android:showAsAction="ifRoom"/>
<item
android:id="@+id/menu_scan"
android:checkable="true"
android:orderInCategory="2"
android:title="@string/menu_scan"
android:showAsAction="ifRoom|withText"/>
<item
android:id="@+id/menu_stop"
android:title="@string/menu_stop"
android:orderInCategory="3"
android:showAsAction="ifRoom|withText"/>
<item
android:id="@+id/menu_exit"
android:title="@string/menu_stop"
android:orderInCategory="4"
android:showAsAction="never"/>
</menu>
这是我的 XML 菜单文件..
<item
android:id="@+id/action_send_feedback"
android:orderInCategory="100"
android:showAsAction="always"
android:title="@string/action_send_feedback"/>
<item
android:id="@+id/action_share_app"
android:orderInCategory="100"
android:showAsAction="ifRoom"
android:title="@string/action_share_app"
android:icon="@drawable/ic_action_share" />
<item
android:id="@+id/action_rate_app"
android:orderInCategory="100"
android:showAsAction="never"
android:title="@string/action_rate_app"/>
Java代码:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
对于 android phone 具有选项按钮(在 phone 的底部)的菜单项 showAsAction="never" 当按钮是按下..否则它们将正常显示在操作栏选项菜单上..
如果您正在使用 appcompat 库,则需要更改
android:showAsAction="never"
到app:showAsAction="never"
示例
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_view_contact"
app:showAsAction="always|withText"
android:icon="@drawable/ic_action_person"
android:title="@string/action_view_contact" />
<item
android:id="@+id/action_save_contact"
app:showAsAction="always|withText"
android:icon="@drawable/ic_action_add_person"
android:title="@string/action_save_contact" />
<item
android:id="@+id/action_change_notification"
app:showAsAction="never|withText"
android:title="@string/action_turn_off_notifications" />
注意:这个答案现在已经过时了。
tnx @gMale 突出显示以下内容:
Caution: Using reflection to read this field will now throw an exception when targeting API 31 and above.
原回答:
在 Android 4.4 之前,如果设备有硬件菜单按钮,操作溢出菜单会通过硬件按钮激活并且不会显示溢出(又名三点)图标。
Android 4.4+ 设备将显示操作溢出图标,即使存在硬件菜单按钮(而且,Google 试图说服制造商放弃硬件菜单按钮,如您所见,供应商很固执)
要强制 4.4 之前的设备显示动作溢出按钮,即使它们有硬件按钮,请将其放入 activity 的 onCreate()
try {
ViewConfiguration config = ViewConfiguration.get(this);
Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");
if (menuKeyField != null) {
menuKeyField.setAccessible(true);
menuKeyField.setBoolean(config, false);
}
} catch (Exception ex) {
// Ignore
}
在this post之后,出现带有以下代码的图标:
override fun onCreateOptionsMenu(menu: Menu): Boolean {
if (menu is MenuBuilder) (menu as MenuBuilder).setOptionalIconsVisible(true)
menuInflater.inflate(R.menu.simple_menu, menu)
return true
}
注意:有一个 lint 警告,表明这是一个受限制的 API,只能在内部使用。 . .但它有效。
在下面的menu.xml中,我试图在溢出菜单图标中显示menu_exit
,所以如下图我设置了它的showAsAction="never"
,但是当我运行 应用程序,溢出菜单未显示。
我的问题是:
- 如何在溢出菜单中放置 menu.xml
menu_exit
的最后一项? - menu.xml中的第3项,当它被禁用时,显示在
settings menu
(设备左下角的按钮)中,而我想要的是,当它被禁用时它不应出现在任何地方,仅在启用时出现在ActionBar
上。
menu.xml:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/menu_refresh"
android:orderInCategory="1"
android:showAsAction="ifRoom"/>
<item
android:id="@+id/menu_scan"
android:checkable="true"
android:orderInCategory="2"
android:title="@string/menu_scan"
android:showAsAction="ifRoom|withText"/>
<item
android:id="@+id/menu_stop"
android:title="@string/menu_stop"
android:orderInCategory="3"
android:showAsAction="ifRoom|withText"/>
<item
android:id="@+id/menu_exit"
android:title="@string/menu_stop"
android:orderInCategory="4"
android:showAsAction="never"/>
</menu>
这是我的 XML 菜单文件..
<item
android:id="@+id/action_send_feedback"
android:orderInCategory="100"
android:showAsAction="always"
android:title="@string/action_send_feedback"/>
<item
android:id="@+id/action_share_app"
android:orderInCategory="100"
android:showAsAction="ifRoom"
android:title="@string/action_share_app"
android:icon="@drawable/ic_action_share" />
<item
android:id="@+id/action_rate_app"
android:orderInCategory="100"
android:showAsAction="never"
android:title="@string/action_rate_app"/>
Java代码:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
对于 android phone 具有选项按钮(在 phone 的底部)的菜单项 showAsAction="never" 当按钮是按下..否则它们将正常显示在操作栏选项菜单上..
如果您正在使用 appcompat 库,则需要更改
android:showAsAction="never"
到app:showAsAction="never"
示例
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_view_contact"
app:showAsAction="always|withText"
android:icon="@drawable/ic_action_person"
android:title="@string/action_view_contact" />
<item
android:id="@+id/action_save_contact"
app:showAsAction="always|withText"
android:icon="@drawable/ic_action_add_person"
android:title="@string/action_save_contact" />
<item
android:id="@+id/action_change_notification"
app:showAsAction="never|withText"
android:title="@string/action_turn_off_notifications" />
注意:这个答案现在已经过时了。
tnx @gMale 突出显示以下内容:
Caution: Using reflection to read this field will now throw an exception when targeting API 31 and above.
原回答:
在 Android 4.4 之前,如果设备有硬件菜单按钮,操作溢出菜单会通过硬件按钮激活并且不会显示溢出(又名三点)图标。
Android 4.4+ 设备将显示操作溢出图标,即使存在硬件菜单按钮(而且,Google 试图说服制造商放弃硬件菜单按钮,如您所见,供应商很固执)
要强制 4.4 之前的设备显示动作溢出按钮,即使它们有硬件按钮,请将其放入 activity 的 onCreate()
try {
ViewConfiguration config = ViewConfiguration.get(this);
Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");
if (menuKeyField != null) {
menuKeyField.setAccessible(true);
menuKeyField.setBoolean(config, false);
}
} catch (Exception ex) {
// Ignore
}
在this post之后,出现带有以下代码的图标:
override fun onCreateOptionsMenu(menu: Menu): Boolean {
if (menu is MenuBuilder) (menu as MenuBuilder).setOptionalIconsVisible(true)
menuInflater.inflate(R.menu.simple_menu, menu)
return true
}
注意:有一个 lint 警告,表明这是一个受限制的 API,只能在内部使用。 . .但它有效。