再谈Android日夜模式

Android  小知识  2023年8月29日 am8:08发布1年前 (2023)更新 城堡大人
133 0 0

前言

之前介绍过Android日夜模式的使用,日夜模式是Android高版本自带的一种模式,很方便也很使用。如果换肤只有2种皮肤,这个是最佳选择,因为Android日夜模式只要按照规则即可实现。

虽然介绍过,但很多细节还是没有说明白,因此由写一篇流水文,方便自己回顾。

正文

日夜模式就是我们常说的静态换肤的一种。进入话题前,先介绍一下优缺点。

知此知彼,百战不殆

优点

  1. 使用简单,Android自带

缺点

  1. 只支持两套皮肤(日间和夜间皮肤)

  2. APK可能臃肿(若图片资源过多的话)

资源目录

Android高版本支持日夜模式,并创建夜间对应资源目录。

drawable
# 白天(默认)
drawable-nodpi
drawable-mdpi
# 黑夜
drawable-night-nodpi
drawable-night-mdpi

注意night的位置,是在中间哈!

位置写错是Android是无法识别里面黑夜资源图片!

values
# 白天(默认)
values
# 黑夜
values-night

AndroidManifest.xml

<activity
    android:name=".MainActivity"
    android:configChanges="uiMode"
    android:exported="true"
    android:launchMode="singleInstance">
    //站长 略
</activity>

这里主要是配置了

android:configChanges="uiMode"
不设置uiMode

如果不设置uiMode,切换模式时MainActivity会先销毁,然后重新创建。

#MainActivity在顶部
onPause
onStop:
onDestroy
onCreate
onResume

如果界面没啥逻辑,只是刷新UI,那没啥问题。一旦有其他逻辑,比如加载动画等,那就是又会重新走一次,这样肯定不友好。

设置uiMode

如果设置了uiMode,须重写onConfigurationChanged(),因此MainActivity不会先销毁再启动,二是直接回调onConfigurationChanged()这里。

PS: android:configChanges=""里面还有好多配置,这里不介绍。

@Override
public void onConfigurationChanged(@NonNull Configuration configuration) {
    super.onConfigurationChanged(configuration);
    //站长,打印模式变化
    Log.d(TAG, "updateMode configuration uiMode : " + (configuration.uiMode & Configuration.UI_MODE_NIGHT_MASK));
    //重新加载UI
    reloadUI();
}

其实,Android的日夜模式都是设计好了的,要么重启Activity(不配置uiMode),要么自己重新加载一次UI资源。

隐藏内容!
付费阅读后才能查看!
2
3
多个隐藏块只需支付一次

参考文章

  1. Android日夜模式

 历史上的今天

  1. 2024: 使用ffmpeg抽取视频I帧(0条评论)
  2. 2020: 去除阴影动画效果和影藏滚动条(0条评论)
  3. 2019: adb shell settings 参数命令集合(0条评论)
  4. 2019: AccessibilityService自启动(0条评论)
  5. 2019: 丰子恺:渐(0条评论)
版权声明 1、 本站名称: 笔友城堡
2、 本站网址: https://www.biumall.com/
3、 本站部分文章来源于网络,仅供学习与参考,如有侵权,请留言

暂无评论

暂无评论...

随机推荐

Android aidl简单使用

前言简单记录一下aidl的使用,方便自己查阅和复习。正文因为客户端和服务端都需要引入相同的aidl的定义,因此这里单独吧aidl文件作为一个lib库。Biu2Aidl库Biu2Aidl是lib库,存放客户端和服务端共同的aidl定义和Constant类。IBook.aidl/Biu2...

Android 语言切换相关问题记录

前言Android切换语言是很常用的功能,项目中一般都会要做做英文和中文两种语言的切换,这里就简单的记录一下改变语言相关的问题。正文圆规正传监听语言切换的广播Intent.ACTION_LOCALE_CHANGED//如下是完整的定义public static final Strin...

C语言之类型转换符大全

前言C语言类型打印是要有转换符,也就是我们常用的%d,%c等,这里简单记录一下相关规则,方便自己查阅。正文转换说明符占位符                   说明%d                       有符号十进制整数%i 一...

ATC平台编译命令记录

前言主要记录一下ATC项目中用的编译命令。方便自己查阅。主要是个人用,每个平台可能不一样。不推荐看哈正文在Android源码目录下隐藏内容!付费阅读后才能查看!¥2 ¥3多个隐藏块只需支付一次付费阅读参考文章1.《ATC 文档》

常见的文件头或文件尾十六进制表示

前言最近在加载图片时,由于需要对不同图片使用不同的加载方式,因此需要通过判断图片的类型进行条用不同的接口。因此摘抄于此,以便查阅。正文下面的文件头或文件尾都是用十六进制表示的。JPEG (jpg)文件头:FFD8FF文件尾:FFD9PNG (png)文件头:89504E47文件尾...

自定义SeekBar样式

前言简单记录一下使用shape定制Seekbar样式。正文这里主要在参考文章末尾连接修改的。谢谢。自定义thumb/res/drawable/seek_bar_thumb.xml<?xml version="1.0" encoding="utf-8"?><shape...