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中重新加载文字资源 (此处理保证更新语言)

你可能感兴趣的:(Android)