AndroidManifest.xml中android:configChanges的简介
程序在运行时,一些设备的配置可能会改变,如:横竖屏的切换、键盘的可用性等,这样的事情一发生,Activity会重新启动。过程:在销毁前先调用onSaveInstanceState()保存应用中一些数据,然后调用onDestroy(),最后才调用onCreate()或onRestoreInstanceState()方法重新启动Activity。
用android:configChanges去指定属性,当被指定的属性发生变化时,不会去重新启动Activity,而是通知程序去调用 onConfigurationChanged()函数。例如:在进行横竖屏的切换时,会重新启动Activity,而定义了这个属性,就不会重新启动Activity了,而是去调用 onConfigurationChanged()函数。
设置方法:将下列字段用"|"符号分隔开,例如:"locale|navigation|orientation"
Value Description
"mcc" The IMSI mobile country code (MCC) has changed — that is, a SIM hasbeen detected and updated the MCC.移动国家号码,由三位数字组成,每个国家都有自己独立的MCC,可以识别手机用户所属国家。
"mnc" The IMSI mobile network code (MNC) has changed — that is, a SIM hasbeen detected and updated the MNC.移动网号,在一个国家或者地区中,用于区分手机用户的服务商。
"locale" The locale has changed — for example, the user has selected a new language that text should be displayed in.用户所在地区发生变化。
"touchscreen" The touchscreen has changed. (This should never normally happen.)
"keyboard" The keyboard type has changed — for example, the user has plugged in an external keyboard.键盘模式发生变化,例如:用户接入外部键盘输入。
"keyboardHidden" The keyboard accessibility has changed — for example, the user has slid the keyboard out to expose it.用户打开手机硬件键盘
"navigation" The navigation type has changed. (This should never normally happen.)
"orientation" The screen orientation has changed — that is, the user has rotated the device.设备旋转,横向显示和竖向显示模式切换。
"fontScale" The font scaling factor has changed — that is, the user has selected a new global font size.全局字体大小缩放发生改变
"uiMode" 用户的模式发生了变化
"screenLayout" 屏幕的显示发生了变化------不同的显示被激活
"screenSize" 屏幕大小改变了
"smallestScreenSize"屏幕的物理大小改变了,如:连接到一个外部的屏幕上
实例:
AndroidManifest.xml文件
...
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".TestActivity"
android:label="@string/app_name"
android:configChanges="keyboardHidden|orientation">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
...
TestActivity.java文件
package com.test;
import android.app.Activity;
import android.content.res.Configuration;
import android.os.Bundle;
public class TestActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE){
// 横屏
}else{
// 竖屏
}
}
}