天天看點

android全局螢幕自動旋轉,Android螢幕旋轉

很久沒有寫文章了,找個時間整理下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" />