最近在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 | 螢幕的實體大小改變了,如:連接配接到一個外部的螢幕上 |