【问题标题】:GUI Problems on setTheme (Glitch) AndroidsetTheme (Glitch) Android 上的 GUI 问题
【发布时间】: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


【解决方案1】:

这似乎是一个错误......在 Android 6 (xCover 3) 上它很好,在 Android 9 (Nokia 6.1) 上它会出现故障。我为 API 23 开发。 但是!!!!

在 DarkMode 中,我使用 HEX 作为颜色,

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

解决问题。

对于 RadioButton 的 TextColor,我必须这样做,我跳过了选择器,我不需要它,使用 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>

在活动中

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

【讨论】:

  • 十六进制对于新的 Android 版本来说很糟糕,背景已设置 -> 覆盖
  • 我很遗憾:#555555 从来没有用过,只是旧版本不在乎。 #555555 必须看起来像 lightdarkgray 不是黑色(没有价值),如屏幕截图所示,我应该删除这个帖子,我让它快速和肮脏的想法,就像我一样!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多