windowbackground在黑暗和明亮的主题中不起作用

时间:2019-07-02 18:04:21

标签: java android styles

嗨,我有一个主题,用户可以选择亮或暗,一切正常,但是有两个问题:
1.当我打开应用程序时(以深色/浅色主题),首先显示白页,然后应用程序使用深色主题
2.当我更改主题时,首先出现黑屏

我尝试更改背景,但是没有用,更改了颜色,并且使用了可绘制的形状。无论如何,它都行不通,并且两者都使用一种颜色

style.xml

 <style name="AppTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar"/>

values / themes.xml

 <style name="Theme.MaterialComponents.DayNight.NoActionBar"
        parent="Theme.MaterialComponents.Light.NoActionBar">

        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="android:windowBackground">@drawable/window_background</item>
    </style>

values-night / themes.xml

 <style name="Theme.MaterialComponents.DayNight.NoActionBar"
        parent="Theme.MaterialComponents.NoActionBar">

        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/TabBackground</item>
        <item name="colorAccent">@color/green_inactive</item>
        <item name="android:windowBackground">@drawable/window_background_dark</item>

    </style>

windows_background

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
    <solid android:color="#64b5f6"/>
</shape>

windows_background_dark
与上面的代码相似,只是颜色不同

这就是我加载主题的方式

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (Prefs.getIsDarkMode(getApplicationContext()))
            AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
        else
            AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);

        setContentView(R.layout.activity_main);
}

1 个答案:

答案 0 :(得分:0)

不需要为背景创建单独的文件。您可以在黑暗和夜晚的xml文件本身中进行操作。查看下面的链接。我已通过此视频实现了夜间模式。

https://youtu.be/-qsHE3TpJqw 如果您在执行过程中遇到任何问题,请留言。