Android 溢出菜单按钮在某些手机上不可见
Android Overflow Menu Button is not visible on some phones
该应用程序 运行 很好。在带有硬选项菜单按钮的设备上,菜单会显示出来,所以我知道它可以工作。在某些设备上,它会在右上角显示溢出按钮。
我的测试用例设备是华硕 Zenphone 5,没有硬按钮,我也没有溢出按钮。但是当我 运行 单击按钮的 showOptionsMenu() 命令时,它会显示选项菜单,所有相关事件都没有问题。
菜单 - Xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@+id/select" android:title="Select" android:showAsAction="never"></item>
<item android:id="@+id/add_kid" android:title="Add" android:showAsAction="never"></item>
</menu>
onCreate & onPrepare
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
getMenuInflater().inflate(R.menu.menu1, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onPrepareOptionsMenu(Menu menu)
{
if(!getCheckInStatus())
{
menu.setGroupVisible(R.id.group1,false);
}
else
{
menu.setGroupVisible(R.id.group1,true);
}
return super.onPrepareOptionsMenu(menu);
}
Activity
的清单值
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
.....
<activity
android:name="com.my.package.MyActivity"
android:configChanges="orientation|keyboard"
android:label="@string/app_name"
android:launchMode="singleInstance"
>
</activity>
对于此事,我将不胜感激。
在menu.xml中设置android:showAsAction="ifRoom"
,按钮会显示。
Menu - Xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@+id/select" android:title="Select" android:showAsAction="never"></item>
<item android:id="@+id/add_kid" android:title="Add" android:showAsAction="never"></item>
</menu>
在您的 menu.xml 中,您只是将 showAsAction 用作 never,表示 永远不要将此项目放在操作栏中。 请参阅 link 以获取更多信息
这样试试。这对我有用..
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:icon="@drawable/ic_action_overflow"
android:id="@+id/moreItmes"
android:showAsAction="never"
android:title="@string/more">
<menu>
<item
android:id="@+id/select"
android:showAsAction="never"
android:title="@string/Select"/>
<item
android:id="@+id/add_kid"
android:showAsAction="never"
android:title="@string/Add"/>
</menu>
</item>
</menu>
我曾经在我的几个项目中遇到过同样的问题。我按照下面给出的对我有用的步骤
1. 将 activity 扩展到 ActionBarActivity
在onCreate方法中调用如下代码
private void makeActionOverflowMenuShown()
{
//devices with hardware menu button (e.g. Samsung Note) don't show action overflow menu
try {
ViewConfiguration config = ViewConfiguration.get(this);
Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");
if (menuKeyField != null) {
menuKeyField.setAccessible(true);
menuKeyField.setBoolean(config, false);
}
} catch (Exception e) {
}
}
正如我在 vinay 的回答中评论的那样,原因是我正在调试别人编写的旧程序。似乎都是 Activities ,但我已经将目标和编译方式更改为 22。一旦我将 Activity 更改为 ActionBarActivity ,溢出就会出现在带有软菜单按钮的设备上。而那些带有硬选项菜单按钮的则没有显示它。
该应用程序 运行 很好。在带有硬选项菜单按钮的设备上,菜单会显示出来,所以我知道它可以工作。在某些设备上,它会在右上角显示溢出按钮。
我的测试用例设备是华硕 Zenphone 5,没有硬按钮,我也没有溢出按钮。但是当我 运行 单击按钮的 showOptionsMenu() 命令时,它会显示选项菜单,所有相关事件都没有问题。
菜单 - Xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@+id/select" android:title="Select" android:showAsAction="never"></item>
<item android:id="@+id/add_kid" android:title="Add" android:showAsAction="never"></item>
</menu>
onCreate & onPrepare
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
getMenuInflater().inflate(R.menu.menu1, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onPrepareOptionsMenu(Menu menu)
{
if(!getCheckInStatus())
{
menu.setGroupVisible(R.id.group1,false);
}
else
{
menu.setGroupVisible(R.id.group1,true);
}
return super.onPrepareOptionsMenu(menu);
}
Activity
的清单值<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
.....
<activity
android:name="com.my.package.MyActivity"
android:configChanges="orientation|keyboard"
android:label="@string/app_name"
android:launchMode="singleInstance"
>
</activity>
对于此事,我将不胜感激。
在menu.xml中设置android:showAsAction="ifRoom"
,按钮会显示。
Menu - Xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@+id/select" android:title="Select" android:showAsAction="never"></item>
<item android:id="@+id/add_kid" android:title="Add" android:showAsAction="never"></item>
</menu>
在您的 menu.xml 中,您只是将 showAsAction 用作 never,表示 永远不要将此项目放在操作栏中。 请参阅 link 以获取更多信息
这样试试。这对我有用..
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:icon="@drawable/ic_action_overflow"
android:id="@+id/moreItmes"
android:showAsAction="never"
android:title="@string/more">
<menu>
<item
android:id="@+id/select"
android:showAsAction="never"
android:title="@string/Select"/>
<item
android:id="@+id/add_kid"
android:showAsAction="never"
android:title="@string/Add"/>
</menu>
</item>
</menu>
我曾经在我的几个项目中遇到过同样的问题。我按照下面给出的对我有用的步骤 1. 将 activity 扩展到 ActionBarActivity
在onCreate方法中调用如下代码
private void makeActionOverflowMenuShown() { //devices with hardware menu button (e.g. Samsung Note) don't show action overflow menu try { ViewConfiguration config = ViewConfiguration.get(this); Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey"); if (menuKeyField != null) { menuKeyField.setAccessible(true); menuKeyField.setBoolean(config, false); } } catch (Exception e) { } }
正如我在 vinay 的回答中评论的那样,原因是我正在调试别人编写的旧程序。似乎都是 Activities ,但我已经将目标和编译方式更改为 22。一旦我将 Activity 更改为 ActionBarActivity ,溢出就会出现在带有软菜单按钮的设备上。而那些带有硬选项菜单按钮的则没有显示它。