前言

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()

参考文章

  1. Android 获取当前系统语言及地区
  2. [Android] 切换语言后避免Activity重启方法
  3. AndroidManifest.xml的configChanges配置简介
  4. Android系统切换语言后,Activity中的文本没有改变

相关文章

暂无评论

none
暂无评论...