如何设置夜间模式可用的绘图资源,以使其按预期工作

7
我希望你能够在夜间模式下更改背景。我有/values和/values-night文件夹,其中包含具有不同值的"colors.xml"文件。
<color name="grey1">#ebebeb</color>
<color name="grey2">#c7c7c7</color>
<color name="grey3">#999999</color>
<color name="hover1">#8bb065</color>
<color name="red1">#ba0000</color>
<color name="red2">#ff0000</color>
<color name="green1">#336600</color>
<color name="text1">#000000</color>

and other is

<color name="grey1">#999999</color>
<color name="grey2">#333333</color>
<color name="grey3">#000000</color>
<color name="hover1">#8bb065</color>
<color name="red1">#ba0000</color>
<color name="red2">#ff0000</color>
<color name="green1">#336600</color>
<color name="text1">#ffffff</color>

这些颜色用于背景"activity_main_bg2.xml"的图层列表:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item>
        <shape android:shape="rectangle" >
            <solid android:color="@color/grey1" />
        </shape>
    </item>
    <item
        android:bottom="1dp"
        android:left="1dp"
        android:right="1dp">
        <shape android:shape="rectangle" >
            <solid android:color="@color/grey2" />
        </shape>
     </item>
</layer-list>

我的活动包含片段:

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello_world_dark"
    android:background="@drawable/activity_main_bg2" />

当我将时间从白天更改为黑夜或者反过来时,背景颜色并不会改变。但是如果我使用以下代码:
android:background="@color/grey1"

一切都运作正常。

如何解决这个问题?这是Android的bug吗?


你确定 UiModeManager.getNightMode() 返回的是 MODE_NIGHT_AUTO 吗? - Mohamed_AbdAllah
@Mohamed_AbdAllah:是的,我确定。正如最后一句所述,如果我将颜色设置为背景,它会按预期工作。但如果我设置layer-list,情况就不同了。 - Solata
1个回答

9
请尝试以下操作:
  1. Create file style.xml in folder res/values and res/values-night.
  2. Add to both of them style for your TextView like:

    <style name="textViewStyle">
    <item name="android:background">@drawable/activity_main_bg2</item>
    </style>
    
  3. Update your layout to:

    <TextView
    style="@style/textViewStyle"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello_world_dark" />
    

这个解决方案应该可以获取与白天/黑夜模式相关的颜色属性。


2
很棒的替代方案!但是为什么我们必须在res/values和res/values-night中都拷贝一份style.xml?根据文档,如果在/values-night中找不到res xml,则应该使用/values中的那一个。我真的很想知道这是为什么发生的! - Solata
似乎将activity_main_bg2.xml复制到drawable-night中,这两个xml具有相同的内容,也可以正常工作。但我认为不应该这样做。 - peerless2012

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接