再谈onConfigurationChanged

Android  2023年9月1日 pm12:12发布1年前 (2023)更新 城堡大人
89 0 0

前言

AndroidonConfigurationChanged()这个方法很常见,之前关于横竖屏和语言切换的也介绍过,今天又一次再介绍一下之前没有介绍的。

记录一下,方便自己查阅。也是流水文一篇。

正文

这里要分Application和Activity(或AppCompatActivity)来介绍。

Application

在Application中也可以重写onConfigurationChanged(),

@Override
public void onConfigurationChanged(@NonNull Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
}

在Application中,可以监听系统的所有变化,比如语言,日夜模式,分辨率等。

因此,做系统换肤,如果用了我日夜皮肤库BiuSkin1DN,只需要这里进行重新刷新UI资源即可。

Activity

在Activity中对onConfigurationChanged()是需要配置的。

Fragment跟Activity一样,这里就不单独了

需要在AndroidManifest.xml中配置一下

android:configChanges="keyboardHidden|orientation|touchscreen|screenSize|locale|screenLayout|mcc|mnc|uiMode|layoutDirection|fontScale|smallestScreenSize|navigation|keyboard"

上面是我常配置的值,部分含义如下:

值                  含义
mcc                 SIM卡唯一标识IMSI中的国家代码,由三位数字组成
mnc                 SIM卡唯一标识IMSI中的运营商代码,由两位数字组成
locale              设备的本地位置发生了改变,一般指切换了系统语言
touchscreen          触摸屏发生了改变
keyboard             键盘类型发生了改变,比如使用了外插键盘
keyboardHidden       键盘的可访问性发生了改变
navigation           系统导航方式发生了改变
screenLayout         屏幕布局发生了改变
fontScale            系统字体缩放比例发生了改变
uiMode               用户界面发生了改变,比如日夜模式
orientation          屏幕方向发生了改变,
screenSize           屏幕尺寸发生了改变,
smallestScreenSize   屏幕的物理大小改变了
layoutDirection      布局方向发生变化
density               显示密度变化

下面以日夜模式为例哈

不配置

AndroidManifest.xml中不配置

android:configChanges="uiMode"

当系统切源日夜模式时,Activity就会先销毁再创建(这个是Android做的),这样就可以重新加载对应的UI资源。

# 销毁
onDestroy:
# 重新创建
onCreate: 
onResume:

也就是界面闪一下。

配置

AndroidManifest.xml如有如下配置

android:configChanges="uiMode"

当系统切源日夜模式时,Activity会回调onConfigurationChanged(),让用户自己进行刷新UI。

onConfigurationChanged()
onResume:

参考文章

  1. Android中onConfigurationChanged的总结

  2. “onConfigurationChanged”的搜索结果

 历史上的今天

  1. 2020: Android setSystemUiVisibility详解(0条评论)
  2. 2019: 龙应台:幸福就是……(0条评论)
版权声明 1、 本站名称: 笔友城堡
2、 本站网址: https://www.biumall.com/
3、 本站部分文章来源于网络,仅供学习与参考,如有侵权,请留言

暂无评论

暂无评论...

随机推荐

[摘]Android Studio Minimum supported Gradle version is 6.5. Current version is 6.1.1

前言开发中导入别人项目时偶尔如下这种提示:Android Studio Minimum supported Gradle version is 6.5. Current version is 6.1.1记录一下,方便自己查阅。正文完整的提示内容如下Minimum supported ...

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

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

林夕:赏味期限

那还是你和好友说着想要去很多很多地方的年纪。你踢踢踏踏地在走廊里面一边走一边数着自己到底想去多少个地方,好友跟在你的后面臭着一张脸喊,好高骛远的家伙,离开这里看谁天天陪你。你转身去拉她的手,笑得相当谄媚,说你可以陪我一起去呀。好友摇着手告诉你去去去,先把英文考及格了再说吧。所谓好友到底可以好成...

JNI学习手册

前言之前初略的学习了一下JNI的使用,也做了对应的笔记。为了方便自己复现,这里就把所有文章整理在一起,方便自己查询。正文JNI之数据类型Java中调到Native方法传递的参数是Java类型,这些参数需要通过Dalvik虚拟机转换为JNI类型。具体请看《JNI之类型介绍》基本数据类型...

林清玄:幸福的无关

我小时候对汽水有一种特别奇妙的向往,原因不在汽水有什么好喝,而是由于喝不到汽水。我们家是有几十口人的大家族,小孩依序排行就有18个之多,记忆里东西仿佛永远不够吃,更别说喝汽水了。喝汽水的时机有三种,一种是喜庆宴会,一种是过年的年夜饭,一种是庙会节庆。即使有汽水,也总是不够喝。到要喝汽水时好像进行一...

纪伯伦:我曾有七次鄙视自己的灵魂

我曾有七次鄙视自己的灵魂:第一次是看见她为了上升而故作谦卑时。第二次是看见她在瘸者面前跛行时。第三次是让她在难易之间做选择,她选择了易时。第四次是她犯了错,却自我安慰说别人也犯同样的错时。第五次是她容忍了软弱,还将这容忍视作坚强时。第六次是她鄙弃一张难看的面孔,...