1. 程式人生 > >android:configuration 處理螢幕旋轉和語言切換等問題

android:configuration 處理螢幕旋轉和語言切換等問題

當APP設定為螢幕可旋轉的時候,會發現在旋轉螢幕的過程中,使用者在EditText等控制元件中輸入的內容會隨之消失,這種情況同樣發生在切換系統語言的時候。

列印APP的生命週期,當進行螢幕方向轉換的時候,生命週期如圖:

這裡寫圖片描述

螢幕方向的轉換,引起了Activity的重建,重新執行了onCreate( )方法。
由於資料沒有儲存,在Activity重建之後,資料丟失。

解決方法:

一、防止Activity重建

在AndroidManifest.xml中對Activity設定 android:configChanges=”orientation|screenSize”,告訴系統在進行方向轉換的時候,不要去銷燬Activity並重建,直接呼叫onConfigurationChanged(Configuration newConfig)方法,由使用者去進行處理,這就要求開發者在Activity中重寫onConfigurationChanged(Configuration newConfig)方法,將改變方向需要做的處理寫到onConfigurationChanged(Configuration newConfig)中,比如在螢幕方向轉變的時候進行佈局的切換。
這時候在進行方向轉換的時候,不會在進行生命週期的變化,而是直接呼叫了onConfigurationChanged()方法。如圖

這裡寫圖片描述

二、允許Activity重建

如果允許Activity重建,則需要開發者對重建Activity前後的資料進行儲存,儲存資料時,重寫onSaveInstanceState(Bundle outState)方法,恢復資料時,重寫onRestoreInstanceState(Bundle savedInstanceState)方法。這兩個方法由系統呼叫,呼叫時機如圖:

這裡寫圖片描述

注意:
在設定語言切換屬性的時候,在4.2系統之前,只需要設定為

android:configChanges="locale" 

但是在4.2之後,需要同時設定layoutDirection,即

android:
configChanges="locale|layoutDirection"

否則仍會導致Activity的重建。