导航号,我的单页导航
文章目录

前言

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”的搜索结果

© 版权声明
导航号,我的单页导航

暂无评论

暂无评论...