最近在做平闆的app項目,之前隻記得Activity生命周期重構方法,但是不管用,後來才發現4.0以上的系統需要加上另外一個屬性,希望大家共勉!!! android:configChanges,這個方法主要是負責列出清單,當清單上使用者指定的設定改變時,Activity會自己處理這些變化。 orientation,螢幕界面旋轉(可能是使用者手動旋轉的) 【注意:如果你的開發API等級等于或高于13,你還需要設定screenSize,因為screenSize會在螢幕旋轉時改變】
4.0以下系統需要清單檔案中設定 <activity android:name="Activity的全路徑名" android:configChanges="orientation|keyboardHidden" >//不重構生命周期 </activity>
4.0以上系統的需要在清單檔案裡面設定 <activity android:name="Activity的全路徑名" android:configChanges="orientation|keyboardHidden|screenSize" >//不重構生命周期 </activity>
當設定以上屬性的時候Activity生命周期不會重構,但是會執行該Activity的onConfigurationChanged
public void onConfigurationChanged(Configuration newConfig) {
try {
super.onConfigurationChanged(newConfig);
if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
Log.v("Himi", "onConfigurationChanged_ORIENTATION_LANDSCAPE");
} else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
Log.v("Himi", "onConfigurationChanged_ORIENTATION_PORTRAIT");
}
} catch (Exception ex) {
}
}
當指定的屬性發生變化時,不會去重新啟動Activity,而是通知程式去調用 onConfigurationChanged()函數 例如:在進行橫豎屏的切換時,會重新啟動Activity,而定義了這個屬性,就不會重新啟動Activity了,而是去調用 onConfigurationChanged()函數
可以設定多個屬性,中間用|隔開
VALUE DESCRIPTION
"mcc" 國際移動使用者識别碼所屬國家代号是改變了----- sim被偵測到了,去更新mcc mcc是移動使用者所屬國家代号
"mnc" 國際移動使用者識别碼的移動網号碼是改變了------ sim被偵測到了,去更新mnc MNC是移動網号碼,最多由兩位數字組成,用于識别移動使用者所歸屬的移動通信網
"locale" 位址改變了-----使用者選擇了一個新的語言會顯示出來
"touchscreen" 觸摸屏是改變了------通常是不會發生的
"keyboard" 鍵盤發生了改變----例如使用者用了外部的鍵盤
"keyboardHidden" 鍵盤的可用性發生了改變
"navigation" 導航發生了變化-----通常也不會發生
"screenLayout" 螢幕的顯示發生了變化------不同的顯示被激活
"fontScale" 字型比例發生了變化----選擇了不同的全局字型
"uiMode" 使用者的模式發生了變化
"orientation" 螢幕方向改變了
"screenSize" 螢幕大小改變了
"smallestScreenSize" 螢幕的實體大小改變了,如:連接配接到一個外部的螢幕上