Android - Меню OverFlow в темной теме цвета неверны при использовании Theme.MaterialComponents.DayNight.NoActionBar - PullRequest
0 голосов
/ 07 мая 2020

Я использую реализацию из руководства, описанного на веб-сайте MaterialDesign: https://material.io/develop/android/theming/dark/

Что бы я ни пробовал, цвета текста меню и собственные значки меню, такие как значок раскрытия меню , имеют неправильный цвет, в частности, они кажутся цветами режима освещения. Я хочу, чтобы это был текст темной темы (белый текст и значки собственных меню на темной поверхности).

Другие аспекты в порядке, такие как панели инструментов, представления карточек, текст и другие поверхности.

От насколько я понимаю, это должно работать без каких-либо модификаций кода, а цвет текста должен автоматически изменяться на светлый цвет при появлении на «поверхности» меню переполнения запаса.

Я не думаю, что перезаписываю это везде. В этом проекте нет других известных мне стилей.

Пример: enter image description here

Мои стили. xml:

<style name="MyTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorSecondary">@color/colorSecondary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="colorControlActivated">@color/colorControlActivated</item>
</style>

build.gradle:

android {compileSdkVersion 29

   defaultConfig {
       applicationId "poop"
       minSdkVersion 17
       targetSdkVersion 29
       versionCode 24
       versionName "3.2.2"
       multiDexEnabled true
       vectorDrawables.useSupportLibrary = true
   }
   compileOptions {
       sourceCompatibility = 1.8
       targetCompatibility = 1.8
   }

}

Я пробовал некоторые предложения по перезаписи тем, касающиеся проблем с меню при stackoverflow. В большинстве случаев текст не исправляется, и он остается черным.

Некоторые исправляют текст, но другие элементы, такие как шеврон для раскрытия подменю, остаются черными на темной поверхности.

1 Ответ

0 голосов
/ 23 июля 2020

Вы можете переопределить popupTheme (используется для всплывающего меню) на панели инструментов, чтобы он использовал colorOnSurface для цвета текста.

<style name="ThemeOverlay.MyApp.Toolbar" parent="@style/ThemeOverlay.MaterialComponents.Toolbar">
    <item name="popupTheme">@style/ThemeOverlay.MyApp.PopupTheme</item>
</style>

<style name="ThemeOverlay.MyApp.PopupTheme" parent="">
    <item name="android:textColorPrimary">?attr/colorOnSurface</item>
</style>

Если вы используете MaterialToolbar, вы можете применить это переопределение в стиле по умолчанию в своем приложении (потому что MaterialToolbar поддерживает materialThemeOverlay):

<style name="MyTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar">
    ...
    <item name="colorSurface">@color/white</item>
    <item name="colorOnSurface">@color/black</item>
    <item name="toolbarStyle">@style/Widget.MyApp.Toolbar</item>
</style>

<style name="Widget.MyApp.Toolbar" parent="@style/Widget.MaterialComponents.Toolbar">
     <item name="materialThemeOverlay">@style/ThemeOverlay.MyApp.Toolbar</item>
</style>

Если вы используете Toolbar, вам нужно будет установить его в своем макет в самой декларации Toolbar с android:theme=“@style/ThemeOverlay.MyApp.Toolbar”.

В values-night/themes.xml вам нужно будет установить colorSurface и colorOnSurface на цвета, которые вы хотите в темном режиме. Я бы рекомендовал реструктурировать ваши темы, чтобы избежать дублирования определений с одинаковыми значениями.

...