【问题标题】:How to override default background color in xml?如何覆盖xml中的默认背景颜色?
【发布时间】:2012-12-26 07:25:34
【问题描述】:

我的main.xml 文件包含有关应用背景颜色等信息:

android:background="@color/background_default"

我也有不同的样式供用户选择,保存在其他 xml 文件中。当用户选择其中之一时,我希望 main.xml 中包含的默认值被覆盖。

不幸的是,只有文本颜色被覆盖,背景颜色没有改变。这是其中一种自定义样式:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="Light">
        <item name="android:textColor">@color/text_light</item>
        <item name="android:windowBackground">@color/background_light</item>
        <item name="android:colorBackground">@color/background_light</item>
    </style>
</resources>

【问题讨论】:

    标签: android android-layout inheritance background-color overwrite


    【解决方案1】:

    使用你的样式的父属性继承默认主题,然后覆盖:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <style name="Light" parent="android:Theme">
            <item name="android:textColor">@color/text_light</item>
            <item name="android:windowBackground">@color/background_light</item>
            <item name="android:colorBackground">@color/background_light</item>
        </style>
    </resources>
    

    【讨论】:

    • android:Theme 不起作用,它只会覆盖文本颜色
    【解决方案2】:

    您可以从 main.xml 中省略 android:background="@color/background_default",并应用使用该颜色的默认主题。然后当用户改变主题时,背景也会随之改变。

    您不能使用主题来覆盖在视图 xml 中指定的颜色;视图更具体并覆盖主题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-19
      • 2020-03-17
      • 2013-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多