При нацеливании на API 26 пункты меню переполнения становятся невидимыми - PullRequest
0 голосов
/ 13 января 2019

В моем приложении есть меню опций, которое содержит более шести пунктов, поэтому есть пункт «Дополнительно», который вызывает меню переполнения. Меню публикуется с помощью триггеров меню по умолчанию и пользовательского триггера, который вызывает 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, которые создают и публикуют его, работали годами, но теперь я меняю targetSdkVersion с уровня API 8 на 26, в соответствии с последними требованиями Play, и теперь внезапно пункты меню в переполнении меню стало невидимым.

Меню переполнения все еще отправляет сообщения, и оно все еще имеет правильный размер, и пункты меню все еще работают. Вы просто больше их не видите: все меню теперь полностью черное, что является нормальным цветом фона; отсутствует текст пункта меню.

Телефон, на котором я тестирую, - это Motorola G5 под управлением Android 8.1.0. Это единственное устройство, которое у меня есть на данный момент для тестирования с API 26, по крайней мере, пока я не выясню, как создать AVD с API> = 26.

N.B. В симуляторе Android с изображением уровня API 8 меню переполнения по-прежнему выглядит нормально. Раньше он хорошо смотрелся и на Moto G5, прежде чем я нацелился на API 26. Если я верну цель на 8, меню переполнения снова будет работать.

Есть мысли о том, что я мог бы сделать, чтобы это исправить? Мои навыки Google не работают над этим ... Любые идеи будут приветствоваться!

1 Ответ

0 голосов
/ 13 января 2019

Я добавил этот файл стиля как 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>

Первая - это тема по умолчанию, определяемая путем изменения атрибута android: theme в Activity с @android: style / Theme.NoTitleBar на @ style / Free42Theme в AndroidManifest.xml; вторая - это полноэкранная тема, заданная в коде Java, путем изменения вызова setTheme (android.R.style.Theme_NoTitleBar_Fullscreen) для вызова setTheme (R.style.Free42Theme_Fullscreen).

Это меняет фон меню переполнения на белый, делая черный текст элемента видимым, что проверено на моем G5. При запуске в симуляторе с Android 2.2 (уровень API 8) внешний вид остается неизменным, поскольку фон с самого начала был белым.

Большое спасибо SteelToe за то, что вы выбрали меня на правильном пути!

...