我們知道在運行時發生配置變更時,默認情況下會關閉Activity并將其重啟,但是使用該屬性宣告配置將阻止Activity重啟,相反,Activity會保持運行狀態,并且系統會呼叫其onConfigurationChanged()方法,任何或所有下列字串均是該屬性的有效值,若有多個值,則使用 "|" 進行分隔,例如:"locale|navigation|orientation",
| 值 | 描述 |
| "density" | 顯示密度發生變更 - 用戶可能已指定不同的顯示比例,或者有不同的顯示現處于活躍狀態, 此項為API24中的新增配置 |
| "fontScale" | 字體縮放系數發生變更 - 用戶已經選擇新的全域字號 |
| "keyboard" | 鍵盤型別發生變更 - 例如,用戶插入外置鍵盤 |
| "keyboardHidden" | 鍵盤無障礙功能發生變更 - 例如,用戶顯示硬鍵盤 |
| "layoutDirection" | 布局方向發生變更 - 例如,自從左至右(LTR)更改為從右至左(RTL), |
| "locale" | 語言區域發生變更 - 用戶已為文本選擇新的顯示語言 |
| "mcc" | IMSI 移動設備國家/地區代碼(MCC)發生變更 - 檢測到SIM 并更新 MCC,· |
| "mnc" | IMSI 移動設備網路代碼(MNC) 發生變更 - 檢測到 SIM 并更新 MNC, |
| "navigation" | 導航型別(軌跡球/方向鍵)發生變更,(這種情況通常不會發生) |
| "orientation" | 螢屏方向發生變更 - 用戶旋轉設備, 請注意:如果應用面向Android 3.2 (API13)或者更高版本的系統,則還應宣告 "screenSize" 配置,因為當設備在橫向與縱向之間切換時,該配置也會發生變更 |
| "screenLayout" | 螢屏布局發生變更 - 不同的顯示可能處于活躍狀態 例如:頁面由全屏切換到分屏狀態或由分屏狀態切換到全屏狀態時可以使用此屬性值 |
| "screenSize" | 當前螢屏尺寸發生變更, 該值表示當前可用尺寸相對于當前縱橫比的變更,當用戶在橫向和縱向之間切換時,它便會發生變更, |
| "smallestScreenSize" | 物理尺寸發生變更, 該值表示與方向無關的尺寸變更,因此它只有在實際物理螢屏尺寸發生變更(如切換到外部顯示幕)時才發生變化,對此配置所變更對應smallestWidth配置的變化, |
| "touchScreen" | 觸摸屏發生變更,(這種情況通常不會發生) |
| "uiMode" | 界面模式發生變更 - 用戶已將設備置于桌面或車載基座,或者夜間模式發生變更, 深色模式與淺色模式相互切換時可以使用此屬性值 |
所有這些配置變更都可能影回應用所看到的資源值,因此,呼叫 onConfigurationChanged() 時,通常有必要再次檢索所有資源(包括視圖布局、可繪制物件等),以正確處理變更,
請注意:如果處理所有多視窗模式相關的配置變更,請使用 "screenLayout" 和 "smallestScreenSize",
關于螢屏旋轉一般認為有以下幾點:在Api 13之前
1. 不設定Activity的android:configChanges時,橫豎屏切換回重新呼叫Activity的各個生命周期,切換橫屏會執行一次,切換豎屏會執行兩次,
2. 設定Activity的android:configChanges = "orientation"時,切屏還是會重新呼叫各個生命周期方法,切橫,豎屏都會只執行一次,
3. 設定Activity的android:configChanges = "orientation|keyboardHidden"時切屏不會重新呼叫生命周期,只會呼叫onConfigurationChanged方法,
但是自從Android 3.2(API 13)之后,在設定Activity的android:configChanges = "orientation|keyboardHidden"后,還是一樣會重新執行各個生命周期方法,因為,screen size也會在橫豎屏切換的同時發生改變,所以,在app目錄下的build.gradle里設定的MiniSdkVersion和 TargetSdkVersion屬性大于等于13的情況下,如果你想阻止程式在運行時重新加載Activity,除了設定"orientation",你還必須設定"ScreenSize",解決方法:AndroidManifest.xml中設定android:configChanges="orientation|screenSize“
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/265670.html
標籤:其他
