美文网首页
Dark/Light Mode in Android

Dark/Light Mode in Android

作者: 鹈鹕醍醐 | 来源:发表于2019-10-24 17:45 被阅读0次

    IOS13最近更新加入了深夜模式,carplay也跟着更新了,应用可以设置为跟随系统设置 自动调整light/dark模式。其实这种功能各大app都自己做过,但都是单打独斗跟系统无关。于是找了安卓相关sample,顺便记下

    实现流程:

    • 必须集成:androidx.appcompat:appcompat:1.1.0,可选集成:com.google.android.material:material:1.1.0-beta01,material即androidX之前的supportDesign
    • 在res文件夹下新建values-night目录,目录内新建colors.xml
    • app主题继承自Theme.MaterialComponents.DayNight 或者Theme.AppCompat.DayNight
    • 任何地方对颜色的引用都不要 hardcode,而是引用color实现,需要跟随dark/light改变颜色的确保在values-night和values都能找到定义的位置
    • 设置api为:AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_TYPE)
    • 如果当前activity不适合改变dark/light模式,可在Manifest添加android:configChanges="uiMode",然后设置监听onConfigurationChanged
      override fun onConfigurationChanged(newConfig: Configuration) {
            val currentMode = newConfig.uiMode and Configuration.UI_MODE_NIGHT_MASK
            今日头条是先开启一个太阳/月亮的动画,动画结束后重绘
            when(currentMode){
                Configuration.UI_MODE_NIGHT_YES->{
                    Log.e(localClassName,"DARK mode")
                    recreate() or  define your code
                }
                Configuration.UI_MODE_NIGHT_NO ->{
                    Log.e(localClassName,"day mode")
                     recreate() or  define your code
                }
            }
            super.onConfigurationChanged(newConfig)
        }
      

    编译版本要求:

    • compileSdkVersion建议采用最新29,targetSdkVersion建议28或更高。国内应用商店一般都会参考Google Play对APP提交商店时的targetSdkVersion要求:

      开始日期 API 级别要求 限制说明
      2018 年 8 月 1 日 Android 8.0(API 级别 26) 新应用必须符合
      2018 年 11 月 1 日 Android 8.0(API 级别 26) 应用更新必须符合
      2019 年 8 月 1 日 Android 9(API 级别 28) 新应用必须符合
      2019 年 11 月 1 日 Android 9(API 级别 28) 应用更新必须符合
    • 可用于调整dark/light模式的几个关键常量

      名称 API 级别要求 说明
      MODE_NIGHT_FOLLOW_SYSTEM api-29 跟随系统
      MODE_NIGHT_AUTO_BATTERY 跟随低电量模式
      MODE_NIGHT_AUTO_TIME 跟随日出日落时间
      MODE_NIGHT_NO 强制Light模式
      MODE_NIGHT_YES 强制Dark模式

      MODE_NIGHT_AUTO_BATTERY 调整的阈值是设备出现低电量弹窗时的电量,当设备启用低电量模式时启动深色主题,否则启动浅色主题。

      MODE_NIGHT_AUTO_TIME 需要根据当前网络定位或者GPS定位位置才可计算得出精确的日出日落时间。app必须具有定位权限(运行时权限),如果位置为空则直接根据当前时间是否在6-22点判断

    相关文章

      网友评论

          本文标题:Dark/Light Mode in Android

          本文链接:https://www.haomeiwen.com/subject/adhrvctx.html