大家在进行android开发时,有时候需要进行多语言的适配
比如一个app需要兼容英文或者中文等多种语言
基本的实现方式
就是放置多套资源,并且给每套资源进行命名
比如drawable-zh-rCN-hdpi
这个文件夹就是放置中文的图片资源的
values-en-rUS文件夹自然是放置英文的相关values资源
这些都是最基本的
在用户进入app之前就会判断系统的语言
从而选择对应的文件夹内容
那么如果要在app内部修改语言呢?
也就是自己的app用自己的语言版本。
哪怕系统的语言是简体中文
但是这个app却可以独立地使用自己想使用的语言版本
比如英文、法语等
这里就要用到一个Local类了
首先我们需要知道,
app的语言对应的都是有相关代码的
我们可以去网络上查找
也可以用这个方法打印出来
Locale[] ls = Locale.getAvailableLocales(); for (Locale locale:ls) {Log.d("print", "onCreate: "+locale); }
如果我们要手动地修改这个app的适配语言
需要以下步骤
private Resources resources;//资源对象 private Configuration config;//设置对象 private DisplayMetrics dm;//屏幕参数
然后实例化对象
//获得res资源对象 resources = getResources(); //获得设置对象 config = resources.getConfiguration(); dm = resources.getDisplayMetrics();//获得屏幕参数:主要是分辨率,像素等。
最后修改语言
config.locale = Locale.CANADA; //简体英文 resources.updateConfiguration(config, dm);
同时需要注意的是,必须要重新进入app才有效
但我们可以使用
Activity自带的recreate()方法重新创建activity
这样就完成了修改app内的默认语言
进入子页面也是默认这个语言了
app会自动搜索资源文件夹去匹配相关的资源了
这时候可以用共享参数将语言版本保存起来
还有一点要注意
Locale.CANADA
代表的是加拿大语
这是系统自己有的静态变量
但是并不是所有国家的语言都有对应的静态变量
这就需要我们自己去定义Local了。
方法也很简单
Locale mylocale = new Locale("en", "US");
这里面的参数怎么来呢?
其实就是一开始这个数组打印出来的参数了
去网上百度到相关的国家所代表的代码即可
这里提供一个查询的网站吧
https://www.cnblogs.com/linlf03/p/3680454.html
Locale[] ls = Locale.getAvailableLocales(); for (Locale locale:ls) {Log.d("print", "onCreate: "+locale); }
最后,想获取默认的Local只需要调用下面的方法即可
Locale.getDefault();
本篇博客参考了以下博客
http://blog.csdn.net/u013310119/article/details/64127771