很久沒有寫文章了,找個時間整理下Android簡單的螢幕旋轉的生命周期和正确的豎屏鎖定設定
生命周期
啟動Activity會執行如下方法:
onCreate –> onStart –> onResume
之後旋轉螢幕,則Activity會被銷毀并重新建立,之後便會執行如下方法:
onPause –> onSaveInstanceState –> onStop –> onDestroy
–> onCreate –> onStart–>onRestoreInstanceState –> onResume
在AndroidManifest配置檔案裡聲明android:configChanges屬性
預設螢幕旋轉會重新建立,當然可以通過在配置檔案裡加上如下代碼:
android:configChanges="keyboardHidden|orientation|screenSize"(sdk>13時需加上screenSize)
這個時候再旋轉螢幕便不會銷毀Activity,這時候再旋轉螢幕可以看到隻會執行onConfigurationChanged方法,有什麼在螢幕旋轉的邏輯可以重寫這個方法.
public void onConfigurationChanged(Configuration newConfig) {
if (newConfig.orientation == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {
// TODO:
}
super.onConfigurationChanged(newConfig);
}
螢幕縱向固定
android:name=".sign.region.RegionActivity"
android:label="@string/region_switch"
android:screenOrientation="portrait" />
android:ConfigChanges:在Activity中設定相應屬性,當該Activity中配置的相應狀态發生改變,則不交給系統處理(系統處理:銷毀Activity并重新啟動Activity),而是系統回調onConfigurationChanged()方法,我們在onConfigurationChanged()方法中對指定狀态的改變進行捕捉,并自定義處理。
設定方法:将下列字段用“|”符号分隔開,例如:“locale|navigation|orientation”
“mcc“ 移動國家号碼,由三位數字組成,每個國家都有自己獨立的MCC,可以識别手機使用者所屬國家。
“mnc“ 移動網号,在一個國家或者地區中,用于區分手機使用者的服務商。
“locale“ 所在地區發生變化。
“touchscreen“ 觸摸屏已經改變。(這不應該常發生。)
“keyboard“ 鍵盤模式發生變化,例如:使用者接入外部鍵盤輸入。
“keyboardHidden“ 使用者打開手機硬體鍵盤
“navigation“ 導航型發生了變化。(這不應該常發生。)
“orientation“ 裝置旋轉,橫向顯示和豎向顯示模式切換。
“fontScale“ 全局字型大小縮放發生改變
從Android 3.2(API 13),在設定Activity的android:configChanges="orientation|keyboardHidden"後,還是一樣會重新調用各個生命周期的。因為screen size也開始跟着裝置的橫豎切換而改變。是以,在AndroidManifest.xml裡設定的MiniSdkVersion和 TargetSdkVersion屬性大于等于13的情況下,如果你想阻止程式在運作時重新加載Activity,除了設定"orientation",你還必須設定"ScreenSize"。
android:screenOrientation參數設定
android:screenOrientation設定該活動的方向, 該值可以是任何一個下面的字元串:
"unspecified":預設值. 由系統選擇顯示方向. 在不同的裝置可能會有所不同.
"landscape":橫向
"portrait":縱向
"user":用戶目前的首選方向
"behind":與在活動堆棧下的活動相同方向
"sensor":根據實體方向傳感器确定方向. 取決于用戶手持的方向, 當用戶轉動裝置, 它跟隨改變.
"nosensor":不經實體方向傳感器確定方向. 該傳感器被忽略, 是以當用戶轉動裝置, 顯示不會跟隨改變. 除了這個差別,系統選擇使用相同的政策取向對于“未指定”設定. 系統根據“未指定”("unspecified")設定選擇相同顯示方向.
豎屏鎖定正确姿勢
android:name=".sign.region.RegionActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:label="@string/region_switch"
android:screenOrientation="portrait" />