Android переопределяет все стили кнопок, кроме диалоговых окон

#android #android-styles #android-7.0-nougat

#Android #android-стили #android-7.0-nougat

Вопрос:

Я переопределил стиль кнопок по умолчанию в своем приложении следующим образом:

 <style name="ButtonStyle" parent="Base.Widget.AppCompat.Button">
        <item name="android:textAllCaps">false</item>
        <item name="android:textSize">18sp</item>
        <item name="android:textColor">@color/primaryTextContrast</item>
        <item name="android:background">@drawable/button</item>
    </style>
  

До Nougat это работало нормально, но с Nougat произошли изменения (я думаю, исправление ошибки), так что этот стиль также применяется к кнопкам в диалоговых окнах, в то время как в предыдущих версиях этого не было. Это приводит к приданию кнопкам диалога белого текста на белом фоне.

В случае, если это актуально, button это патч 9 в drawable и переопределен в drawable-v21 :

 <ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="?attr/colorControlHighlight">
    <item android:drawable="?attr/colorPrimary"/>
</ripple>
  

Основной цвет темный, а primaryTextContrast белый. По какой-то причине диалоги не получают темных кнопок в Nougat — кажется, они подбирают цвет текста, но не фон. Итак, мне нужно либо позволить кнопкам диалогового окна работать по умолчанию, либо заставить кнопки полностью наследовать стиль с темным фоном и белым текстом.

Комментарии:

1. Вы нашли какое-либо решение? Я сталкиваюсь с той же проблемой

2. Нет, у меня нет.

Ответ №1:

@nasch, кнопки диалогового окна используют стиль панели кнопок. В этом сценарии вы могли бы сделать что-то вроде

 <style name="buttonBarButtonStyle" parent="Widget.AppCompat.Button.ButtonBar.AlertDialog">
    <item name="android:textColor">@color/colorPrimary</item>
</style>
  

Затем в вашем основном определении стиля вы определяете

 <style name="MyCustomTheme" parent="Theme.AppCompat">
  <item name="buttonBarButtonStyle">@style/buttonBarButtonStyle</item>
 ...
  

Надеюсь, это поможет.