再谈onConfigurationChanged

Android  2023年9月1日 pm12:12发布1年前 (2023)更新 91es.com站长
68 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、 本站名称: 91易搜
2、 本站网址: 91es.com3xcn.com
3、 本站内容: 部分来源于网络,仅供学习和参考,若侵权请留言
3、 本站申明: 个人流水账日记,内容并不保证有效

暂无评论

暂无评论...

随机推荐

余光中:绝色

美丽而善变的巫娘,那月亮翻译是她的特长却把世界译走了样 把太阳的鎔金译成了流银把烈火译成了冰而且带点薄荷的风味 凡尝过的人都说译文是全不可靠但比起原文来呢却更加神秘,更加美 雪是另一位唯美的译者存心把世界译错或者译对,诗人说只因原文本来就...

[代码片段]GradientTextView渐变的TextView

前言本质上就是通过LinearGradient来实现渐变的正文public class GradientTextView extends androidx.appcompat.widget.AppCompatTextView { public GradientTextView(Context...

Android Studio重构清除无引用资源

前言Android开发中,发现移植的APP模块存有很多图片和xml等资源,至于是否有引用,不去查询是不太好知道的。但是Android Studio有个功能,也就是Android Studio Refactor/Remove Unused Resources【重构,移除没有引用的资源】。PS:...

Android双屏异显(Presentation)的简单使用

前言Android 从4.2开始支持双屏显示,支持版本为17以上。Android 双屏原理说白了,自定义一个Presentation类,Android 的标准实现是使用 API Presentation 来实现异显的功能。public class Presentation extends D...

Android中ImageView半边圆角处理记录2

前言之前介绍过对ImageView进行圆角处理,具体文章《Android中ImageView半边圆角处理记录 -91易搜 - 阅读是一种生活方式 ()》,后面发现网上还有一种更简单的一种方式。有点:代码少,简单缺点:边界不够圆滑(存在锯齿)正文具体效果如下(左侧是RoundImage...

舒婷:北戴河之滨

那一夜我仿佛只有八岁我不知道我的任性要求着什么你拨开湿漉漉的树丛引我走向沙滩在那里 温柔的风抚摸着毛边的月晕潮有节奏地沉没在黑暗里 发红的烟头在你眼中投下两瓣光焰你嘲弄地用手指捺灭那躲闪的火星突然你背转身掩饰地以不稳定的声音问我海怎么啦什么也看不见 你...