Android ActionBar compat溢出菜单未显示在sdk 10上

And*_*fiu 6 android android-sdk-2.3 android-actionbar-compat

您好,感谢您抽出时间阅读此问题.

我正在尝试开发一个将使用ActionBar compat库的Android应用程序.在使用compat库时,我遵循了(据我所知)所有建议.我的清单看起来像这样(只显示相关代码):

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

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />

    <application            
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/Theme.AppCompat.Light" >

    </application>

</manifest>
Run Code Online (Sandbox Code Playgroud)

如你所见,我的目标是sdk 8+.我已经按照建议使用了Theme.AppCompat主题.

我的菜单文件如下所示:

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

    <item
        android:id="@+id/action_map"
        android:icon="@drawable/ic_action_map"
        android:title="@string/action_map"
        cds:showAsAction="ifRoom"/>
    <item
        android:id="@+id/action_search"
        android:icon="@drawable/ic_action_search"
        android:title="@string/action_search"
        cds:showAsAction="ifRoom"/>
    <item
        android:id="@+id/action_mail"
        android:icon="@drawable/ic_action_mail"
        android:title="@string/action_mail"
        cds:showAsAction="ifRoom"/>

</menu>
Run Code Online (Sandbox Code Playgroud)

我使用自己的命名空间作为showAsAction属性.

我的活动扩展了ActionBarActivity类.

问题是:在设备和模拟器上的sdk 10(android 2.3.3)上,溢出菜单(操作栏右侧的三个点)未显示.操作栏上仅显示前两个菜单项.如果我按下设备上的"菜单"按钮,则第三项显示在屏幕的左下角(而不是从右上角显示,因为在具有更新的Android版本的设备上).相同的代码在模拟器上的android sdk 17上运行良好(溢出菜单显示正确的操作).

我在网上搜索了一个解决方案,但我找不到具有这个特定问题的解决方案.如果我没有在Android 2.3.3设备上安装具有相同操作栏并且显示溢出菜单图标并且在任何最近的Android设备上正常工作的应用程序,我会放弃该问题.这个应用程序的一个例子是todoist应用程序(https://en.todoist.com/android)或移动应用程序(https://play.google.com/store/apps/details?id=com.handcent.nextsms&hl = en)这两个都在这个设备上表现良好.

我有什么遗漏或是否有使用actionbar compat的推荐方法的替代解决方案?

感谢您的时间.

Moh*_*ngh 7

@Andrei Google已禁用pre honycomb中appcompat中的菜单溢出按钮.如果你真的想添加它,请转到android的github存储库并下载platform_frameworks_support.它包含platform_framework_support_master/v7/appcompat中appcompat的含义.

在appcompat中创建一个libs文件夹并放入最新的android-support-v4.jar.现在打开文件v7/appcompat/src/android/support/v7/internal/view/ActionBarPolicy.java.您将看到showOverflowMenuButton对于pre honycomb返回false.请返回true并将此已编辑的appcompat作为库添加到您的项目中,您将不需要任何自定义溢出按钮这对我有用.对不起我的英语不好

编辑:实际代码来自 android/support/v7/internal/view/ActionBarPolicy.java

public boolean showsOverflowMenuButton() {
    // Only show overflow on HC+ devices
    return Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB;
}
Run Code Online (Sandbox Code Playgroud)


And*_*Mac 5

试着像我一样表现出来.

我手动添加溢出菜单(三个点):

<item
    android:id="@+id/menu_more"
    android:icon="@drawable/abc_ic_menu_moreoverflow_normal_holo_light"
    android:title="@string/action_settings"
    myapp:showAsAction="always">
    <menu>
        <item
            android:id="@+id/submenu_about"
            android:showAsAction="always"
            android:title="@string/menu_about"/>
    </menu>
</item>
Run Code Online (Sandbox Code Playgroud)

和覆盖菜单按钮单击活动以显示此菜单(解决方案从硬件菜单按钮上的操作栏中的打开子菜单单击):

private Menu mainMenu;    

...

@Override
    public boolean onKeyUp(int keyCode, KeyEvent event) {
        if (event.getAction() == KeyEvent.ACTION_UP) {
            switch (keyCode) {
            case KeyEvent.KEYCODE_MENU:

                mainMenu.performIdentifierAction(R.id.menu_more, 0);
                return true;
            }

        }
        return super.onKeyUp(keyCode, event);
    }
Run Code Online (Sandbox Code Playgroud)

2.2的结果如下:

Android 2.2溢出菜单

希望它能帮到你.