android 切换语言不起作用,Android 语言切换实例及踩坑
为满足Android App更广泛的使用度,通常会包含多语言版本,根据用户的选择,自动加载相应的语言包,并更新界面显示。该过程主要可划分为两步:
1)加入不同语言对应的资源包;
2)根据选择切换界面语言的显示。
语言资源包
任何保存在工程res下的资源文件都可以根据语言保存在不同的资源包中,这里仅以res下的strings.xml为例。
默认的Android工程在res/values下会包含strings.xml,该文件没有语言的适配功能,在没有指定显示语言环境时默认使用,当然也可使用于任何语言环境下;如果设定了语言环境,当某string在对应的语言包下没有相应的注释,则也会在默认的string.xml中查找对应注释。
如何新建简体中文和英文的语言包?
在values下选择新建资源文件Valus Resource files
微信图片_20181014165842.png
file name中输入strings.xml,在下方的available qualifiers中选择Locale,其作用是为当前的xml文件加入属性。区域属性包含语言代码和区域代码,可选范围分别列举在Language和Specific Region Only两列表下,选择后即为该语言包设置标签,在语言环境匹配时加载对应的语言包。
如何获取当前的语言环境?
Android中通过configuration获取当前语言设置,根据版本不同有如下两种方式:
1)API >= 17时已废弃
Locale locale = context.getResources().getConfiguration().locale;
2)在 API >= 17 的版本上可以使用
LocaleList localeList = context.getResources().getConfiguration().getLocales();
Locale locale = localeList.get(0);
之后可通过
String language = locale.getLanguage();
String country = locale.getCountry();
分别获得当前的语言设置和区域设置。
如何设置语言包?
根据上面获取当前语言设置的过程可以看出,设置语言的过程是作用于context的。
更新configuration的过程如下:
@TargetApi(Build.VERSION_CODES.N)
private static Context updateResources(Context context, String language) {
Resources resources = context.getResources();
Locale locale = AppLanguageUtils.getLocaleByLanguage(language);
Configuration configuration = resources.getConfiguration();
configuration.setLocale(locale);
configuration.setLocales(new LocaleList(locale));
return context.createConfigurationContext(configuration);
}
如何改变语言环境?
更新语言包,更改configuration的设置后,需要重新启动activity才能正确加载。
Intent intent = new Intent(CurrentActivity.this, TargetActivity.class);
//TargetActiviy的launchMode为singleInstance时,CurrentActivity和TargetActvity不在一个Task栈
//需要完全终止当前应用后再重启,才能正确加载新的设置
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
如果希望重新加载当前activity,使用recreate()方法即可。
语言设置的过程需要作用于每一个activity。创建activity的基类BaseActivity,并在其中重写如下方法可以免去在每个activity中都重复相同的方法描述。
@Override
protected void attachBaseContext(Context newBase)
{
super.attachBaseContext(updateResources(context, language));
}
activity启动前会先进这里加载对应的语言包,之后执行onCreate。
android 切换语言不起作用,Android 语言切换实例及踩坑相关推荐
- C语言文件缓冲区作用,C语言 文件操作4--文件结构体FILE的理解以及缓冲区再讲...
//文件结构体FILE的理解以及缓冲区再讲 #include #include //要点:文件结构 //struct _iobuf { // char *_ptr; ------当前缓冲区内容指针 / ...
- c语言fun的作用,c语言fun函数有什么作用
c语言fun函数有什么作用 c语言fun函数的作用是被主函数所调用,来定义一个函数或方法,这样在引用时可以用fun表示,比如[int fun(int x,int y)]. c语言fun函数的作用是: ...
- %2d在c语言中什么作用,C语言中的 %2d是什么意思
修饰符格式说明.意义M%md以宽度m输出整型数,不足m时,左补空格0m%0md以宽度m输出整型数,不足m时,左补零m,n%m.nf以宽度m输出实型小数,小数位为n位例如:设i=123,a=12.345 ...
- android:ellipsize=end 不起作用,android:ellipsize=end 失效或者 相关的Bug
其实这文章有点傻逼. 相关的问题 TextView android:ellipsize="end"超出一个字符时不显示-的解决 http://www.pocketdigi.com/ ...
- c语言 const常量作用,C语言 const常量讲解
//const的本质 //const本质上是伪常量,无法用于数组初始化以及全局变量初始化 //原因在于const仅仅限定变量无法直接赋值,但是却可以通过指针间接赋值 //例如局部常量在栈区,而不在静态 ...
- android 多语言不起作用,Android本地化语言环境不起作用,所有区域代码都存在问题...
我需要将除瑞士之类的子语言环境添加到我的应用程序中,而不是普通的德语. 我找到的德语资源文件夹的语言环境扩展名为de.所以我的文件夹名为"values-de".这很好. 然后我添加 ...
- step在c语言中什么作用,C语言step-by-step(二)(数据类型)
第2章:数据类型 先介绍一些计算机指令简单的知识: 大家都知道我们的计算机有硬盘.有内存这两样东西,都属于存储器,但是硬盘属于在掉电后不丢失信息,一般我们把资料存放在硬盘:然而内存掉电会丢掉所有信息, ...
- c语言中英文的作用,C语言中英文对照.doc
C语言中英文对照 一File(文件) Load 加载 F3 Pick(选择) Alt-F3 New 新文件 Save 存盘 F2 Write To 写文件 Directory 目录 Change Di ...
- android下raw目录的作用,Android 之 assets目录和raw目录
Android 中存在assets目录和raw目录,它们既有相似之处又有所不同. 一.共同点: 目录下的资源会被原封不动的拷贝到APK中,而不会像其它资源文件那样被编译成二进制的形式. 二.区别 1. ...
- c语言算术运算的作用,C语言算术运算符和算术表达式
C语言算术运算符和算术表达式 运算符用于执行程序代码运算,会针对一个以上操作数项目来进行运算.下面和大家分享一些C语言算术运算符和算术表达式,一起来看看吧! 一. 基本的算术运算符 (1)+(加法运算 ...
最新文章
- maven快照版本和发布版本
- jMeter Thread group 对应的 constant timer
- Java学习之SpringBoot整合SSM Demo
- 自兴人工智能---认识python语言的基础数据类型和操作
- sv_labs学习笔记——sv_lab4(System Verilog)
- NLP学习—24.Pre-trained Word Embedding—ELMO、GPT、Bert
- 计算器计算经纬距离_经纬距离计算器下载_经纬距离计算器官方下载-太平洋下载中心...
- html设置字体样式罗马,罗马字体英文
- cad计算机配置要求,CAD对电脑配置有什么要求?CAD对电脑配置有什么要求?
- 非root用户安装或升级CUDA和CUDNN版本
- CTFT、DTFT、DFT、FFT
- 智能电子后视镜MFC01-LCD通用版 使用说明与简单故障排查
- 多个域名指向一个ip
- UEFI标准应用程序模块--SMBIOS的读写
- 视频转码编辑工具:Compressor for Mac(4.5.4)
- 关于跨境支付,你了解多少
- Ubuntu 16.04通过Trickle限制某个软件的下载/上传速度
- ue4挂载其他工程生成的pak,打开level
- 多线程threading模块用法 -《狗嗨默示录》-
- 我们距离真正的移动办公,还有多远