天天看點

Android ConfigChanges屬性詳解

最近在Android開發中遇到了多語言的設定問題,語言随系統語言變化。

問題:系統語言改變後,activity會調用onDestory()重新開機,然後重新開機onCreate(),是以一些體驗非常不好。

解決辦法:在activity中配置:

android:configChanges="locale|layoutDirection|keyboard"
           

至少在MIUI上面是沒有問題了,但是對于這種配置,對于不同的ROM可能出出現不同的結果,還有以下奇怪的辦法:

比如建立BaseActivity,在BaseActivity的onCreate中監聽系統語言是否發生改變,然後通過eventBus去通知其他activity更換語言。

下面是對configchanges配置屬性一些介紹:

    VALUE DESCRIPTION 
mcc 國際移動使用者識别碼所屬國家代号是改變了,sim被偵測到了,去更新mcc    MCC是移動使用者所屬國家代号
mnc 國際移動使用者識别碼的移動網号碼是改變了, sim被偵測到了,去更新mnc    MNC是移動網号碼,最多由兩位數字組成,用于識别移動使用者所歸屬的移動通信網
locale 使用者所在區域發生變化,一般是使用者切換了語言時,切換後的語言會顯示出來
touchscreen 觸摸屏是改變了------通常是不會發生的
keyboard 鍵盤發生了改變----例如使用者用了外部的鍵盤
keyboardHidden 鍵盤的可用性發生了改變
navigation 導航發生了變化-----通常也不會發生
screenLayout 螢幕的顯示發生了變化------不同的顯示被激活
fontScale 字型比例發生了變化----選擇了不同的全局字型
uiMode 使用者的模式發生了變化
orientation 螢幕方向改變了---橫豎屏切換
screenSize 螢幕大小改變了
smallestScreenSize 螢幕的實體大小改變了,如:連接配接到一個外部的螢幕上