Меню переполнения TextColor с AppCompat (с помощью Hardware Menu-Key)
У меня проблема с устройствами с отдельным клавишей меню (например, Samsung onces).
В некоторых действиях текстовый цвет элементов меню переполнения является белым при открытии с помощью клавиши меню. Открывая переполнение через три точки, цвет текста всегда черный - как и должно быть.
После скриншота, который визуализирует проблему. С левой стороны все хорошо, переполнение было открыто через три точки. С правой стороны меню открывается с помощью клавиши Menu:
![picture illustrating the issue]()
Моя тема:
<style name="AppThemeToolbar" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/primary_color</item>
<item name="colorPrimaryDark">@color/primary_color_dark</item>
<item name="colorAccent">@color/accent_color</item>
<item name="android:textColorPrimary">@android:color/white</item>
<item name="android:textColorSecondary">@android:color/white</item>
<item name="windowActionModeOverlay">true</item>
<item name="actionModeBackground">@color/action_mode_color</item>
<item name="actionBarPopupTheme">@style/ThemeOverlay.AppCompat.Light</item>
</style>
Примечание: Я использую ту же самую тему в нескольких действиях, хотя в 3 из 5 все в порядке.
Это полностью ошеломляет и не имеет смысла.
Итак, в основном возникает вопрос: как я могу это исправить и почему цвет текста в некоторых действиях черный, а в других - белый (в то время как все они используют одну и ту же тему)?
Что я пробовал (нашел в других подобных сообщениях):
- Настройка
panelBackground
. Это работает, к сожалению, это не решение для меня, так как цветной текст переключается между черным и белым - так что просто нет хорошего фона, который я мог бы установить.
- Что не получилось:
-
android:panelTextAppearance
-
textAppearanceSmallPopupMenu
-
textAppearanceLargePopupMenu
-
popupMenuStyle
-
android:actionMenuTextColor
и actionMenuTextColor
- Я не хочу использовать SpannableStrings - подход, кажется, взломан.
Ответы
Ответ 1
Наконец нашел решение!
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="actionBarPopupTheme">@style/HardwareOptionMenu</item>
</style>
<style name="HardwareOptionMenu" parent="ThemeOverlay.AppCompat.Dark">
<item name="android:textColorSecondary">@color/white</item>
<item name="android:colorBackground">@color/black</item>
</style>
Ответ 2
<style name="AppThemeLL" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="android:windowActionBar">false</item>
<item name="android:windowNoTitle">true</item>
<item name="android:colorBackground">@color/white</item>
<item name="android:textColorSecondary">@color/white</item>
</style>
Этот стиль работал у меня и для активности, в которой вы будете использовать эту тему, расширяйте класс Activity.
Пример:
public class TestActivity extends Activity
{}
Также ваш манифест будет
<activity android:name=".TestActivity"
android:label="Test"
android:theme="@style/AppThemeLL"/>
Ответ 3
Я столкнулся с подобной проблемой. Вы можете попробовать это для AppCompat: -
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="actionBarPopupTheme">@style/HardwareOptionMenu</item>
</style>
<style name="HardwareOptionMenu" parent="ThemeOverlay.AppCompat.Dark">
<item name="android:textColorSecondary">@color/black</item>
<item name="android:colorBackground">@color/white</item>
</style>