Проблемы с графическим интерфейсом на setTheme (Glitch) Android - PullRequest
0 голосов
/ 23 октября 2019

Я программирую приложение. У нас есть время, поэтому я хочу к темному режиму, как дополнительный. (Не день / ночь, а просто внутренняя настройка) Я определил темы с атрибутами, такими как TextColor, которые я реализовал в своем стиле с помощью? Attr / TextColor.

attrs.xml

<resources>
<attr name="TextColor" format="reference" />
<attr name="BackGroundColor" format="reference" />
<attr name="LightTextColor" format="reference" />
</resources>

style.xml

 <style name="AppTheme" parent="Theme.AppCompat.DayNight">
    <item name="android:colorBackground">@color/backGround</item>
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="TextColor">@color/strongText</item>
    <item name="BackGroundColor">@color/backGround</item>
    <item name="LightTextColor">@color/lightText</item>
</style>

<style name="DarkMode" parent="Theme.AppCompat.DayNight">
    <item name="android:colorBackground">#555555</item>
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="TextColor">@color/backGround</item>
    <item name="BackGroundColor">@color/strongText</item>
    <item name="LightTextColor">@color/lighterText</item>
</style>

Я устанавливаю тему для каждого занятия. (Сохраняется в префе) Работает отлично!

 override fun onCreate(savedInstanceState: Bundle?) {
    app = application as ChronoDroidApp
    setTheme(app.selectedTheme)
    super.onCreate(savedInstanceState)
    setContentView(R.layout.actual_shift_ui)
    loadReasons()
}

Я также использую DynamicLayout. Я добавляю радио кнопки, которые мне нужны. Я установил стили как:

var reasonRadioButton = RadioButton(ContextThemeWrapper(this, R.style.CheckBox)).apply {
                        text = reason
                    }
reasonRadioGroup.addView(reasonRadioButton)

Стиль:

<style name="CheckBox">
    <item name="android:padding">8dip</item>
    <item name="android:textColor">@drawable/radio_button</item>
    <item name="android:buttonTint">?attr/TextColor</item>
    <item name="colorControlNormal">?attr/TextColor</item>
    <item name="colorAccent">@color/colorPrimary</item>
    <item name="android:textColorSecondary">?attr/BackGroundColor</item>
</style>

(@ drawable / radio_button не работает для меня, потому что я не могу установить attr в селекторе XML, просто "android: textColor ">? attr / TextColor было бы хорошо - я получу это!) В стиле темы я установил эти пользовательские атрибуты. (черный / белый)

Но теперь, когда я устанавливаю тему (R.style.DarkMode), она ... запуталась! (на всех динамически создаваемых макетах)

Glitch DarkMode

На моей обычной теме поведение правильное: (также на динамическом, это то же самое):

normal theme

У меня проблемы с глюками, это действительно странно. Есть идеи, почему у меня плохое поведение?

1 Ответ

0 голосов
/ 24 октября 2019

Кажется, это ошибка ... на Android 6 (xCover 3) это нормально, на Android 9 (Nokia 6.1) это дает сбои. Я разрабатываю для API 23. НО !!!!

в DarkMode Я использовал HEX для цвета,

<item name="android:colorBackground">@color/strongText</item>

решает проблему.

Для TextColor для RadioButton у меня былодля этого я пропустил селектор, он мне не нужен, все нормально с colorAccent

  <style name="CheckBox">
    <item name="android:padding">8dip</item>
    <item name="android:textColor">?attr/TextColor</item>
    <item name="colorControlNormal">?attr/TextColor</item>
    <item name="colorAccent">@color/colorPrimary</item>
    <item name="android:textColorSecondary">?attr/BackGroundColor</item>
    <item name="android:textColorHint">?attr/TextColor</item>
</style>

и в Activity

var reasonRadioButton = RadioButton(ContextThemeWrapper(this, R.style.CheckBox)).apply {
                        text = reason
                        setTextAppearance(R.style.CheckBox)
                    }
...