前言
Android切换语言是很常用的功能,项目中一般都会要做做英文和中文两种语言的切换,这里就简单的记录一下改变语言相关的问题。
正文
圆规正传
监听语言切换的广播
Intent.ACTION_LOCALE_CHANGED
//如下是完整的定义
public static final String ACTION_LOCALE_CHANGED = "android.intent.action.LOCALE_CHANGED";
改变语言后Activity被重启了
一般情况下,改变语言Activity是不让其重启的。这个是Android的一个机制,比如地区、语言、屏幕旋转等的改变需要重新刷新。
改变语言,为了不让重启,可在AndroidMainfest.xml中Activity中配置如下:
//只针对语言改变
android:configChanges="locale|layoutDirection|keyboard"
当然,为了针对其他的改变导致Activity的改变,可以考虑多配置一些,如下:
<activity
android:configChanges="orientation|uiMode|keyboard|keyboardHidden|fontScale|mcc|mnc|locale|touchscreen|navigation|screenLayout|colorMode"
android:name=".MainActivity"
android:launchMode="singleInstance">
</activity>
获取当前系统的语言
String language = Locale.getDefault().getLanguage();
或者
Configuration config = MyApp.getContext().getResources().getConfiguration();
config.getLocales(); // 输出 en_US 或者zh_CN
这个MyApp.getContext()是Application中定义的,也就是当前的this。
改变语言后推荐使用Application的context获取资源文件
在Activity或者Fragment中通过语言改变后,如果在监听语言变化广播中改变语言。
获取资源文件时,推荐使用Application的context,(上一篇文《Android系统切换语言后,Activity中的文本没有改变》有简单测试)
MyApp.getContext().getResources()
参考文章
© 版权声明