暗黑模式

自从2019年的Google大会之后,在Android Q(即API Level 29)的手机版本上系统就支持了暗黑模式。

怎么开启暗黑模式?
在Android Q手机上面,即Android 系统版本为10的手机上面,直接可以在我们的系统设置里面去打开暗黑模式,以华为手机为例,具体位置为: 设置 ——> 显示 ——> 深色模式,即完成了暗黑模式开启。

forceDarkAllowed
样式中设置 android:forceDarkAllowed 属性,深色主题下系统会自动进行适配。
新建 values-v29 目录,因为 android:forceDarkAllowed 属性 Android 10开始才有。
设置 android:forceDarkAllowed 属性为true

从布局文件中可以看到,并没有设置任何背景色,但深色主题下,APP自动进行了适配。

这种适配方式十分简单,但是不够美观,无法自定义控件颜色样式,全凭系统控制,并不推荐这种自动化方式实现深色模式。

官方推荐另外一种方法,即分别创建浅色和深色的主题样式。
新建 values-night 目录,存放深色主题的样式


image.png

与 forceDarkAllowed 最大的区别在于,深色主题可以手动设置颜色样式。

一些常用的方法:

判断深色主题

public static boolean isDarkTheme(Context context) {
    int flag = context.getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
    return flag == Configuration.UI_MODE_NIGHT_YES;
  }

代码中切换深色主题

 if (isDarkTheme(MainActivity.this)) {
       AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
 } else {
    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
 }

禁止界面适配深色主题
Activity 的 configChanges 属性当中配置 uiMode 避免Activity 重新创建,从而阻止界面适配深色主题。

<activity
      android:exported="true"
      android:name=".MainActivity"
      android:configChanges="uiMode">
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
 </activity>
image.png

如果不想页面随着系统设置变化就尽量不要使用DayNight主题,换成Light 就完全不受系统影响了

theme主题不能继承Dark Theme和DayNight主题,只能继承除此以外的其他主题,譬如 Theme.AppCompat.Light.DarkActionBar。如果使用了Dark Theme主题,则系统不会应用Force Dark。同样,如果使用了DayNight主题,系统也不会应用Force Dark主题。即如果使用的是 DayNight或 Dark Theme 主题,则设置forceDarkAllowed 不生效。

forceDarkAllowed 的含义是是否强制允许使用暗黑效果,如果设置true,则代表可以强制更改为暗黑效果,当前应用的效果随着系统的改变而改变;如果设置为false,则代表不可以强制更改为暗黑效果,当前应用的效果随着系统的改变而不会有任何改变。

系统提供的mode有以下几种模式: 浅色: MODE_NIGHT_NO 深色:MODE_NIGHT_YES 由省电模式设置:MODE_NIGHT_AUTO_BATTERY 系统默认:MODE_NIGHT_FOLLOW_SYSTEM 而设置的方法也很简单:
AppCompatDelegate.setDefaultNightMode(int num);

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容