【问题标题】:Overflow menu is not showing in Actionbar操作栏中未显示溢出菜单
【发布时间】:2015-09-18 09:56:45
【问题描述】:

我花了很多时间在操作栏中显示溢出菜单(三个点),但我无法显示它。我的java代码是

@Override
        public boolean onCreateOptionsMenu(Menu menu) {

            getMenuInflater().inflate(R.menu.map_type, menu);
            return true;
        }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        switch (item.getItemId()){
        case R.id.mapTypeNone:
            myMap.setMapType(GoogleMap.MAP_TYPE_NONE);
            break;
        case R.id.mapTypeNormal:
            myMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
            break;
        case R.id.mapTypeSatellite:
            myMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
            break;
        case R.id.mapTypeTerrain:
            myMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN);
            break;
        case R.id.mapTypeHybrid:
            myMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
            break;

        default:
            break;      
        }

        return super.onOptionsItemSelected(item);
    }
}

map_type.xml 文件是

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/mapTypeNormal"
        android:showAsAction="never"
        android:title="Normal"/>
    <item
        android:id="@+id/mapTypeSatellite"
        android:showAsAction="never"
        android:title="Satellite"/>
    <item
        android:id="@+id/mapTypeTerrain"
        android:showAsAction="never"
        android:title="Terrain"/>
    <item
        android:id="@+id/mapTypeHybrid"
        android:showAsAction="never"
        android:title="Hybrid"/>
    <item
        android:id="@+id/mapTypeNone"
        android:showAsAction="never"
        android:title="None"/>

</menu>

manifest.xml 是

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
 <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:uiOptions="splitActionBarWhenNarrow" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

               </application>

请告诉我应该怎么做才能在我没有显示的操作栏中创建溢出菜单。请帮帮我。

【问题讨论】:

  • 您必须在具有物理(硬件)菜单按钮的设备上进行测试。如果您在没有硬菜单键的设备上测试它,那么它将显示为溢出选项。
  • 如果测试设备有物理菜单按钮,那么我们可以在操作栏显示溢出选项吗?

标签: android-layout android-fragments android-intent android-activity


【解决方案1】:

你也可以在这里使用这个小技巧:

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
}

放置它的好地方是应用程序类的 onCreate-Method。

它将强制应用显示溢出菜单。菜单按钮仍然有效,但会在右上角打开菜单。 从 Android 4.4 开始,无论设备是否有物理 MENU 按钮,操作栏中的 ... 提示都会出现。 Google 当前的兼容性定义文档现在更强烈地反对使用专用的 MENU 按钮。

【讨论】:

    【解决方案2】:

    尝试将菜单布局文件从
    android:showsAction="never" 更改为
    android:showsAction = "ifRoom"。

    希望对你有所帮助..

    【讨论】:

    • 谢谢。但是我的问题已经通过添加之前评论中给出的代码解决了。