以API 26为目标时,溢出菜单项变为不可见

时间:2019-01-13 00:32:27

标签: android android-menu

我的应用程序中有一个选项菜单,其中有六个以上的项目,因此有一个“更多”项目可显示溢出菜单。该菜单由默认菜单触发器和调用Activity.openOptionsMenu()的自定义触发器发布。

菜单本身是从此资源文件构建的:

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/mi_copy"
          android:title="Copy"
          android:icon="@drawable/copy"/>
    <item android:id="@+id/mi_paste"
          android:title="Paste"
          android:icon="@drawable/paste"/>
    <item android:id="@+id/mi_preferences"
          android:title="Preferences"
          android:icon="@android:drawable/ic_menu_preferences"/>
    <item android:id="@+id/mi_flip_calc_printout"
          android:title="Print-Out"
          android:icon="@drawable/printer"/>
    <item android:id="@+id/mi_clear_printout"
          android:title="Clear Print-Out"
          android:icon="@android:drawable/ic_menu_close_clear_cancel"/>
    <item android:id="@+id/mi_about"
          android:title="About Free42"/>
    <item android:id="@+id/mi_import"
          android:title="Import Programs"/>
    <item android:id="@+id/mi_export"
          android:title="Export Programs"/>
</menu>

到目前为止,太好了。菜单和用于创建和发布菜单的Java逻辑已经使用了多年,但是现在,根据最新的Play要求,我将targetSdkVersion从API级别8更改为26,现在突然之间,菜单项溢出了菜单变得不可见。

溢出菜单仍然会发布,并且大小仍然正确,并且菜单项仍然有效。您只是再也看不到它们了:整个菜单现在是纯黑色,这是正常的背景色;菜单项文本丢失。

我正在测试的手机是运行Android 8.1.0的Motorola G5。这是我目前唯一可用API 26进行测试的设备,至少直到我弄清楚如何使用API​​> = 26创建AVD为止。

在具有API级别8图像的Android模拟器中,溢出菜单仍然看起来不错。在我定位到API 26之前,它在Moto G5上也看起来还不错。如果我将目标改回8,则溢出菜单将再次起作用。

对我可以解决此问题有何想法?我的Google技能不适用于此技能...任何想法都将受到欢迎!

1 个答案:

答案 0 :(得分:1)

我将此样式文件添加为res / values / styles.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <style name="Free42Theme" parent="android:style/Theme.NoTitleBar">
        <item name="android:itemBackground">@android:color/white</item>
    </style>

    <style name="Free42Theme.Fullscreen" parent="android:style/Theme.NoTitleBar.Fullscreen">
        <item name="android:itemBackground">@android:color/white</item>
    </style>

</resources>

第一个是默认主题,通过将Activity上的android:theme属性从AndroidManifest.xml中的@android:style / Theme.NoTitleBar更改为@ style / Free42Theme来指定;第二个是通过将setTheme(android.R.style.Theme_NoTitleBar_Fullscreen)调用更改为setTheme(R.style.Free42Theme_Fullscreen)在Java代码中设置的全屏主题。

这会将溢出菜单的背景更改为白色,从而使黑色项目文​​本可见,并在我的G5上进行了验证。在具有Android 2.2(API级别8)的模拟器中运行,外观从一开始就是白色的,因此外观没有变化。

非常感谢SteelToe让我走上正轨!