android 指定语言的资源,Android国际化多语言切换

最近工作中突然要求要项目进行国际化,之前没遇到过。但是也很简单呀,只需要把添加一个相应语言的的strings.xml的资源文件就好了,不是吗?这样只要切换系统语言就能切换app的文字语言了。

但是由此引发了一个稍微深入一点的问题,那就是如果要实现在app中不跟随系统切换语言,可以直接切换语言哪又要怎么做呢?这种功能是支付宝/微信都有的,功能如下图:

612bd913483b

多语言切换.gif

于是努力的研究了一下子,发现实现这个功能也不难,主要涉及到Configuration和Locale这两个类,其中Configuration是设置app配置的,Locale则是表示地理信息等东西,更多详细内容需要大家自己去了解。

基本的大家已经了解了,那么要如何实现它呢?

首先我们要能切换不同的语言,那么必然需要不同的资源包,所以第一步是建立中文和英文两个不同的strings.xml。

然后就使用Configuration和Locale配置语言了,关键代码如下:

/**

* 切换语言

*

* @param language

*/

private void switchLanguage(String language) {

//设置应用语言类型

Resources resources = getResources();

Configuration config = resources.getConfiguration();

DisplayMetrics dm = resources.getDisplayMetrics();

if (language.equals("zh_simple")) {

config.locale = Locale.SIMPLIFIED_CHINESE;

} else if (language.equals("en")) {

config.locale = Locale.ENGLISH;

} else {

config.locale = Locale.getDefault();

}

resources.updateConfiguration(config, dm);

//更新语言后,destroy当前页面,重新绘制

finish();

Intent it = new Intent(MainActivity.this, MainActivity.class);

//清空任务栈确保当前打开activit为前台任务栈栈顶

it.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);

startActivity(it);

}

通过使用这个方法,传入zh_simple或者en两个string类型,就能选择想要的语言了。

值得注意的是假如你的 App 存在某个 activity 和当前设置页 activity 不在一个 task 栈内的话(比如你从某个通知页用 FLAG_ACTIVITY_NEW_TASK 启动的一个 activity),就不会应用语言设置。因此可以直接杀掉当前 App 的进程,保证是“整个”重启了。所以最好就是清除所有任务栈和进程。

重启app之后使用之前设置好的语言

这个问题挺傻的,但是有时候就是拐不过弯来。

事实上我们只需要在设置语言的时候,把当前设置好的语言保存在sharedpreference中就可以了。然后设置一个application的类,在其中的时候读取配置信息就可以了。

图片国际化与尺寸国际化

既然语言可以国际化,那么图片或者尺寸dimens可不可以国际化呢?

其实这也是可以得,只要在相应的目录下建立不同语言的资源包便可以实现,效果如下:

612bd913483b

GIF.gif

方法如下:

612bd913483b

图片国际化.PNG

612bd913483b

尺寸国际化.PNG

在这里,我设置了两种图片,中国地图和美国地图,将美国地图房子drawable-en-hdpi的目录中,然后选择语言就会出现不同的图片。

然后再values-en目录中建立了新的dimens.xml文件,如下:

100dp

100dp

而在values目录的dimens.xml则设置为300dp,这时两种语言切换后,显示的大小就不同了。

其他资源国际化

在往外延伸一点,既然图片和尺寸都能国际化,那么res资源文件夹下的其他东西是不是也可以国际化呢?答案是可以的。

尝试在res文件夹下创建raw文件夹,放置了音频,然后又创建了raw-en的目录,放置另一个音频,切换语言后,两者也是不同的。

因此可以判断,只要是res资源文件夹下的资源,都是可以进行国际化操作的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/505664.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android 抖音爱心动画,Android实现抖音心形函数

刷抖音的时候,无意间刷到 心形函数的动画,觉得很有意思, 就简单的用Android的方式实现了一下.心形函数公式公式 :心形公式X的取值范围:[-1.81,1.81],该取值范围是保证正弦函数有效取值范围。我们可以通过参数 a 的取值, 来形成不同的心形轮廓, 进而形成动…

android手机解除root,手机显示被root什么意思(手机root怎么解除)

手机root后有什么坏处?如何一键获取手机ROOT权限?在信息时代的大环境下,“黑科技”夺走了大部分的眼球,获取手机root属于所有安卓手机的最大黑科技,也是最基础的搞机技能,本篇就给大家讲解下手机root权限获…

Android11MIUI12,安卓11版MIUI12来了,3款已适配

原标题:安卓11版MIUI12来了,3款已适配现在安卓11系统第二个测试版升级更新都已经推送了,不知道各位有没有升级更新到安卓11系统体验一下新系统。不知道你的手机能不能升级安卓11系统,厂商有没有为你的手机适配安卓11系统&#xff…

html修改details范围,HTML details 标签

HTML 标签标签用于创建一个可展开折叠的元件,用户可以从中检索其他附加的信息。实例使用 元素:Copyright 1999-2011.- by Refsnes Data. All Rights Reserved.All content and graphics on this web site are the property of the company Refsnes Data.…

html中如何设计对话框,用纯css3和html制作泡沫对话框实现代码

现在,泡沫对话框是一种比较流行的趋势,一般都是用html和javascript,和或者图片来实现,今天用纯css3和html来实现一些基本的简单的泡沫对话框html代码如下:复制代码代码如下:The basic bubble variantsThis only needs …

html获取此次点击的id,github项目解析(八)--Activity启动过程中获取组件宽高的三种方式...

转载请标明出处:1片枫叶的专栏上1个github小项目中我们介绍了避免按钮重复点击的小框架,其实现的核心逻辑是重写OnClickListener的onClick方法,添加避免重复点击的逻辑,即为第2次点击与第1次点击的时间间隔添加阙值,若…

minitab怎么算西格玛水平_16:三因子二水平全因子实验设计和MINITAB应用训练

16:思慧慧咨询官网――精益生产、六西格玛黑带、绿带、TRIZ创新发明、实验设计DOE、价值工程、全面设备管理(TPM)培训和项目咨询​www.sihuide.com分享地址:千聊入口1 https://m.qlchat.com/topic/details?topicId20000087131743…

html css position,[CSS]CSS Position 详解

一. CSS position 属性介绍CSS中position属性指定一个元素(静态的,相对的,绝对或固定)的定位方法的类型。有static,relative,absolute和fixed四种取值,默认是static。二. position: staticstatic:没有定位&…

win2008无法用计算机名共享,Windows Server 2008 R2中文件共享

在网上找过很多次相关资料,还是自己整理一下吧。实践了才是自己的,只看永远是别人的。服务器:Server 2008 R2(IP:192.168.1.106);客户端:Server 2008 R2(IP:192.168.1.107)一、 创建用户itjong运…

线性规划图解法求最优解_高中数学:简单的线性规划问题

1. 简单线性规划问题的有关概念先来看一道高考题:某公司招收男职员x名,女职员y名,x和y须满足约束条件,则的最大值是( )A. 80 B. 85 C. 90 D. 95(1)约束条件:变量x、y满足的一组条件,如上面高考题中的二元一…

在桌面关闭计算机关机不了怎么办,为什么我电脑按关机屏幕一直显示正在关机却一直关不了机怎么办...

“开始”-->“运行”-->键入“Regedit”-->“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\control\Shutdown子项,在右边窗口中新建一个"字符串值",命名为"FastReboot",同时将"数值数据"设为0即可。如果还不行再…

spark-sql建表语句限制_SparkSQL

SparkSQL介绍Hive是Shark的前身,Shark是SparkSQL的前身,SparkSQL产生的根本原因是其完全脱离了Hive的限制。SparkSQL支持查询原生的RDD。 RDD是Spark平台的核心概念,是Spark能够高效的处理大数据的各种场景的基础。能够在scala中写SQL语句。支持简单的SQ…

计算机大作业论文意义,大学的大作业是什么?

原标题:大学的大作业是什么?大学里面的大作业一般就是课程设计之类的,一些老师会让学生做些课外实践的作业,作为平时成绩的一部分大作业听起来很高大上,然而好多课程其实只是一篇论文。论文类的就是有点水的了。毕竟学…

arduino智能浇花系统_arduino+水泵+继电器+RFID

arduino继电器电机应用场合:加湿器、自动浇花、智能门锁、报警系统.......总之很多场合都适用。本章就介绍利用RFID卡输入,驱动水泵。/* * ---------------------------------------------------------------------------------------------------------…

7段均衡器最佳调节图_超高级的吉他均衡器 更细腻的控制 你值得拥有

BOSS DD-200吉他均衡器最近 BOSS推出了一款全新的吉他均衡效果器,为了追求更细腻的控制,这一次的更新,EQ200 可以说做出了不少的颠覆性改进。面板上很直观的看到,EQ的推子增加到了10段,外加一个总音量,对于…

京瓷m5021cdn如何设置扫描_京瓷产品让您轻松应对潮湿天气

随着即将到来的四月,中国南方大部分地区也将伴随着雨季的到来。这也意味着很多复印件、打印机将会收到潮湿天气的影响,更容易出现卡纸、图像模糊等一系列问题。而京瓷公司最新推出的“黑金刚”系列增加了特有的感光鼓加热功能,有效减少机器受…

server sql 去 反斜杠_%00截断配合反序列化的奇妙利用

文章来源:安全客原文链接:%00截断配合反序列化的奇妙利用 - 安全客,安全资讯平台前言前段时间做了一个CTF题目,发现这道题目相当的精妙,主要是利用了%00的截断来绕过安全校验,最终利用反序列化达成目的。漏…

刷卡提示57能恢复吗_硬盘格式化之后数据还能恢复吗?

硬盘格式化之后数据还能恢复吗? 移动硬盘是工作生活中常用的一种存储介质,如果在其中存储了重要的数据,但是却因为中了病毒、人为删除或者不小心误删除文件或是格式化等而导致数据丢失该怎么办?移动硬盘数据可以恢复吗?如何进行移…

win7电脑蓝屏没有修复计算机,教你win7开机蓝屏怎么修复

在使用电脑的过程中,经常会遇到一些问题,最常见的莫过于win7开机蓝屏了,很多朋友并不知道win7开机蓝屏怎么修复,那么遇到win7开机蓝屏的情况应该怎么办呢?下面小编针对此问题教程大家开机蓝屏怎么修复。方法一、系统自…

怎么从计算机上删除东西吗,怎么在电脑中删除不想要的软件

在电脑中删除不想要的软件该怎么操作呢,那么怎么在电脑中删除不想要的软件的呢?下面是学习啦小编收集整理的怎么在电脑中删除不想要的软件,希望对大家有帮助~~在电脑中删除不想要的软件的方法工具/原料笔记本电脑 或者台式电脑方法/步骤用鼠标点击选择电…