Я программирую приложение. У нас есть время, поэтому я хочу к темному режиму, как дополнительный. (Не день / ночь, а просто внутренняя настройка) Я определил темы с атрибутами, такими как 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), она ... запуталась! (на всех динамически создаваемых макетах)
На моей обычной теме поведение правильное: (также на динамическом, это то же самое):
У меня проблемы с глюками, это действительно странно. Есть идеи, почему у меня плохое поведение?