作者:Yogi
福利
想了解買房知識,可以找我的朋友,千里馬(微信:qianlima0068),教你低首付買房。(註明:CSDN的朋友介紹的)
前言:這個Launcher是我們公司自己開發的。在上一篇【Android問題記錄】Android在設置中切換語言後,回到Lanucher爲什麼會白屏 中,講述瞭如何在切換語言後,不導致Launcher重啓的方法,但是後續發現,確實達到了切換語言不重啓的目的,可是Launcher上的語言也並沒有更新爲系統語言。此篇講述,如何在不重啓Launcher的情況下,也能更新顯示系統語言以及爲何重啓會白屏。
爲何Launcher重啓後有白屏現象
爲什麼別的應用啓動時,是黑屏,而這個Launcher卻是白屏呢?那肯定與應用的背景色相關,而這個Launcher只設置了主題,所以肯定與主題有關係。查看主題,發現主題設置成了
android:Theme.Holo.Light.DarkActionBar
這個主題的背景色就是白色,所以重啓會看到白屏。
所以後來把主題改成了
@android:style/Theme.NoTitleBar.Fullscreen
就不會白屏了。
如何讓Launcher及時更新顯示系統語言
這裏有2個問題,什麼時候更新,怎麼更新。
更新時機
1.當在設置中設置語言後,系統會發送
Intent.ACTION_LOCALE_CHANGED(android.intent.action.LOCALE_CHANGED) 這個Action,所以可以監聽這個廣播(我怎麼知道系統會發送這個廣播呢?這個問題,我後續會寫一篇文章),在onReceive中處理
2.或者在onConfigurationChanged()中處理,效果一樣
怎麼更新
我測試了原生的Setting,每次切換語言後,它都是重啓的,導致我也有了一個誤區:以爲只有重啓才能達到更新顯示系統語言的目的。
後來突然明白,我只要修改語言顯示而已,所以只要把涉及到字符串的地方,再重新加載一遍即可。
我的代碼是這樣的:
mMenuManager.onLocalChanged();
mTvManager.onLocaleChanged();
if (isMediaInited) {
mMediaManager.onLocaleChanged();
}
if (isAppInited) {
mAppManager.onLocaleChanged();
}
if (isSettingInited) {
mSettingManager.onLocaleChanged();
}
總結
想要在切換系統語言後,在不重啓應用的情況下更新顯示系統語言,分兩步走
1.AndoridManifest.xml中在主Activity標籤添加
android:configChanges=”locale” (此句保證應用不重啓)2.監聽Intent.ACTION_LOCALE_CHANGED廣播或者在onConfiguration中重新加載文字資源 (此處理保證更新語言)