文章目录
前言
在android 10以上,手机可开启深色模式,为了让手机更符合谷歌的规范,我们需要进行深色模式的适配
一、不开启深色模式
深色模式下,部分手机系统开启深色模式后,会自动帮我们将app转变为深色模式,即使我们并没有进行适配;这种自动的转色,大部分时候不尽人意,为了不让app在深色模式下显示紊乱,我们需要关闭深色模式;
1.关闭自动深色模式
1.一般我们都会让整个app使用统一的theme,如下:
<application
...
android:theme="@style/mTheme">
...
</application>
在style.xml中,定义我们的theme,如下:
<style name="mTheme" parent="Theme.AppCompat.DayNight.NoActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:windowAnimationStyle">@style/default_animation</item>
<item name="android:windowBackground">@color/base_color_FDFDFD</item>
</style>
为了关闭部分手机系统自动将app转为深色模式,我们需要在style中加入如下一行:
加入之后一般会报错,提示为此设置为api 29 以上才有,我们只需根据提示快速生成value-v29文件夹,
此时会自动在value-v29文件夹下生成style.xml
<item name="android:forceDarkAllowed">false</item>
2.如果APP在前台,系统转为深色模式,APP可见的Activity将会被重新创建,既然我们不开启深色模式,
那么我们也不需要重新创建Activity,在 AndroidManifest.xml 中,我们对Activity 做如下修改:
<activity
...
android:configChanges="uiMode"
...
/>
二、自己适配深色模式
适配深色模式一般有以下几种方式:
- 让系统自动适配;就是上面我们关闭的那种,大部分情况下自动转变深色模式不尽人意,部分手机也无法实现;
- 完全由我们自己适配;即为每种颜色定义一个深色模式下的颜色值,这种方案也需要关闭系统自动转变深色模式的功能,否则部分深色模式下的颜色