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

  1. 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 ,溢出就会出现在带有软菜单按钮的设备上。而那些带有硬选项菜单按钮的则没有显示它。