Android切换语言后,Launcher并没有相应更新语言
Posted 邱小琪Yogi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android切换语言后,Launcher并没有相应更新语言相关的知识,希望对你有一定的参考价值。
作者:Yogi
前言:这个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切换语言后,Launcher并没有相应更新语言的主要内容,如果未能解决你的问题,请参考以下文章