Resources中的Configuration包含了设备的所有配置信息
通过对Resources中configuration的update更新,设定自己需要的配置信息
例如:默认的语音、字体等
Configuration config = res.getConfiguration();
config.fontScale = 1f;
res.updateConfiguration(config, null);
值 | 描述 |
mcc | IMSI移动台的国家代码(MCC)发生变化——一个SIM被探测到并且更新MCC |
mnc | IMSI移动台的网络代码(MNC)发生变化——一个SIM被探测到并且更新MNC |
locale | 区域发生变化——用户选择了一个文本需要显示的新语言 |
touchscreen | 触摸屏发生变化。(这个通常不会发生。) |
keyboard | 键盘类型发生变化——例如:用户插入了外接键盘。 |
keyboardHidden | 键盘的可访问性发生变化——例如:用户发现了硬件键盘。 |
navigation | 导航类型(轨迹球或dpad)发生变化。(通常不会发生。) |
screenLayout | 屏幕布局发生变化——这个会导致显示不同的Activity。 |
fontScale | 字体缩放因子发生变化——用户选择了新的字体大小。 |
uiMode | 当UI模式发生改变的时候——当用户放置设备到桌子或/汽车或夜间模式改变的时候可以引起UI模式变化。阅读UiModeManager。在API级别8时引入。 |
orientation | 屏幕方向发生变化——用户旋转了屏幕。注意:如果应用程序的目标API级别是13或更高(通过属性minSdkVersion和属性targetSdkVersion声明),你也需要声明配置项screenSize,因为这将在设备选择肖像和屏幕方向时发生改变。 |
screenSize | 当前可用屏幕大小发生变化。这代表一个当前可用大小的变化,和当前的比率相关,因此当用户选择不同的画面和图像,会发生变化。然而,如果你的程序目标API级别是12或更低,你的Activity总是会自己处理这个配置变化(这个变化不会引起Activity的重启,甚至在Android 3.2或更新的设备上)。在API级别13里加入的。 |
smallestScreenSize | 物理屏幕大小的变化。不管方向的变化,仅仅在实际物理屏幕打包变化的时候,如:外接显示器。这个配置项的变化引起在smallestWidth configuration里的变化。然而,如果你的程序目标API级别是12或更低,你的Activity将自己处理这个变化(这个变化不会引起Activity的重启,甚至在Android 3.2或更新的设备上)在API级别13里加入的。 |
layoutDirection | 布局方向变化。例如书写方式从左向右(LTR)转换为从右向左(RTL) |
从上述这个表我们可以看到除了横竖屏,包括语言、网络、键盘和外设等变化都可以被onConfigurationChanged函数监控到,具体的内容和释义还是查看官方英文文档吧,详见如下链接
http://developer.android.com/guide/topics/manifest/activity-element.html
中文翻译可以查阅 http://wiki.eoe.cn/page/Activity.html
结合网上的整理,小结跟这几配置相关的情景:
1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次(我在三星4.0设备上发现切横屏和竖屏都是执行一次,而并非这里说的有执行两次的情况,不知道是否以前版本手机会这样?);
2、设置Activity的android:configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次;
3、设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法。
注:上述描述是在Android3.2以前,如果缺少了keyboardHidden选项,不能防止Activity的销毁重启,也就不能执行onConfigurationChanged方法了。在3.2之后,必须加上screenSize属性才可以屏蔽调用Activity的生命周期(我在一些设备上亲测可以不需要keyboardHidden,只要screenSize就可以了,但是保险起见还是继续保留keyboardHidden吧)。