安卓夜间模式开发【深色主题适配】

1.创建文件夹

就在res 下新建 values-night目录,创建对应的colors.xml文件。如果适配图片的话,就创建对应的 drawable-night目录。

安卓夜间模式开发【深色主题适配】_第1张图片

 正常情况下,系统会调用values里面的颜色还有主题等信息,当切换到深色模式的时候,系统就会调用“-night”的文件夹里面的信息,所以当你需要深色模式的图片时,对应就需要创建“mipmap-xxhdpi-night”等等

2.主题设置

valuesvalues-night里面把你的主题设置为继承“Theme.AppCompat.DayNight”或者是它的子类“Theme.AppCompat.DayNight.NoActionBar”等,这是我的主题

安卓夜间模式开发【深色主题适配】_第2张图片

 colors.xml这个文件,要保证在values和values-night这两个文件夹里面是一样的,里面参数的名字要保证一模一样 参数值可以设置为不一样,白天模式的颜色值可以设置在values的color里面,深色模式的颜色值设置在values-night里面。

安卓夜间模式开发【深色主题适配】_第3张图片

 这是我获取到的微信的颜色设置,如果有需要的话,可以使用一下。

3.监听深色主题是否开启

我们还可以监听到暗黑的主题是否开启
(1)在清单文件中给对应的Activity配置 android:configChanges=“uiMode”:


            
                

                
            

(2)在onConfigurationChanged方法中获取:

@Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        int currentNightMode = newConfig.uiMode & Configuration.UI_MODE_NIGHT_MASK;
        switch (currentNightMode) {
            case Configuration.UI_MODE_NIGHT_NO:
                //关闭夜间模式
                Log_Ma.e("=======", "=====关闭夜间模式====");
                AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
                ActivityManager.getAppManager().finishAllActivity();
                startActivity(MainActivity.class);
                break;
            case Configuration.UI_MODE_NIGHT_YES:
                //打开夜间模式
                Log_Ma.e("=======", "=====开启夜间模式====");
                AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
                ActivityManager.getAppManager().finishAllActivity();
                startActivity(MainActivity.class);
                break;
            default:
                break;
        }
    }

这时,可以通过系统的设置切换暗黑模式的关闭和开启。

setDefaultNightMode参数有以下几种模式:
浅色 - MODE_NIGHT_NO
深色 - MODE_NIGHT_YES
由省电模式设置 - MODE_NIGHT_AUTO_BATTERY
系统默认 - MODE_NIGHT_FOLLOW_SYSTEM

4.总结

其实现在还有点问题,微信可以在设置深色模式之后直接在后台切换不崩溃,但是这种方式只能在桌面重新打开才可以,目前还没有找到一个更好的方式解决,我再想想看吧

注意!!!

一旦在manifest里面设置了android:configChanges的话,那么在代码里面设置的屏幕方向就不好使了,必须要在manifest里重新设置!!切记,像这样

 

你可能感兴趣的:(开发新技术,技术总结,屏幕适配)