前言
Android的onConfigurationChanged()这个方法很常见,之前关于横竖屏和语言切换的也介绍过,今天又一次再介绍一下之前没有介绍的。
记录一下,方便自己查阅。也是流水文一篇。
正文
这里要分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:
参考文章
《》
《》
© 版权声明