【发布时间】:2019-10-23 11:40:47
【问题描述】:
我正在编写一个应用程序。我们有时间,所以我想额外进入一个暗模式。 (不是 Day/Night 只是内部设置)我使用 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>
我在每个 Activity 上都设置了主题。(存储在 pref 中)工作正常!
override fun onCreate(savedInstanceState: Bundle?) {
app = application as ChronoDroidApp
setTheme(app.selectedTheme)
super.onCreate(savedInstanceState)
setContentView(R.layout.actual_shift_ui)
loadReasons()
}
我也使用动态布局。我添加了我需要的 RadioButtons。我将样式设置为:
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 对我不起作用,因为我无法在选择器 XML 中设置 attr,只需 "android:textColor">?attr/TextColor 会很好 - 我会明白的!) 在主题样式中,我设置了这个自定义属性。 (黑/白)
但是现在,当我 setTheme(R.style.DarkMode) 时,它变得……一团糟! (在所有动态生成的布局上)
在我的正常主题上,行为是正确的:(在动态上也是一样的):
我担心的是故障,这真的很奇怪。 任何想法为什么我行为不端?
【问题讨论】:
-
看起来像一个具有透明背景的片段,并且您在事务中使用了
add而不是replace,所以之前的片段仍然存在,现在它正在显示。 -
这不是一个片段,这是一个缩进的活动,两个屏幕的加载方式相同。即使我在我的应用程序中更改主题并返回(首选项),它也适用于第一个主题,当我切换主题(暗模式)(在带有 attr 的样式中)时,行为是错误的。 fE。选择 ExtraInfo ("Sonstige Begründung") 它会弹出 (addView) 一个 EditText 但它不会在主题暗模式下扩展布局。 (故障)
-
添加了额外信息,只需设置可见性......(GONE/VISIBLE)......在 DarkMode 上搞砸了一切
标签: android android-layout kotlin