Android切換語言後,Launcher並沒有相應更新語言

作者: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中重新加載文字資源 (此處理保證更新語言)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章