在Android 6.0的系统用户只能选择某一种语言,但是在Android 7.0的系统及以上,用户可以设置语言列表,如图:
Andorid 7.0以前,在获取系统当前语言时有以下2种方法:
//获取 Locale 的方式有二
//方式一
Locale locale = getResources().getConfiguration().locale;
//方式二
Locale locale = Locale.getDefault();
//获取当前系统语言
locale.getLanguage();
但是中文有简体中文zh-CN和繁体中文(台湾zh-TW和香港zh-HK)、英文也有英国英文(en-GB)和美国英文(en-US)的区别,所以一般获取系统语言时都会一起获取地区:
// 获取当前系统语言
String lang = locale.getLanguage() + "-" + locale.getCountry();
在Android 7.0的系统废弃了getResources().getConfiguration().locale,增加了getResources().getConfiguration().getLocales() Api,所以在7.0的系统使用方法一获取系统语言需要做一下适配,使用方法二不需要做适配:
Locale locale;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
locale = getResources().getConfiguration().getLocales().get(0);
} else {
locale = getResources().getConfiguration().locale;
}
//或者使用下面的api 不需要考虑接口 deprecated(弃用)问题
locale = Locale.getDefault();
String lang = locale.getLanguage() + "-" + locale.getCountry();
String lang = locale.getLanguage() + "-" + locale.getCountry();
上面讲述的是获取系统api的方法,但是在7.0的系统上还是会有其他的坑。
建议读者先看一下楼主转载过来的一篇挺有用的博客【好的资源需要分享才有更多人收益哦,多谢原创作者^-^】:
【Android 7.0与6.0多语言效果对比以及遇到的坑】http://blog.csdn.net/zenglanjing/article/details/78623545
楼主在工作中就遇到过一个问题:在android 7.0系统的手机上 分别在res目录下设置了values【默认简体中文】和 values-en【英文】 values-zh-rTW【台湾 繁体】 values-zh-rHK【香港 繁体】文件夹,里面写了各自的strings.xml文件。将系统语言只设置为简体中文时读取的是values文件夹中的默认字符串,一切正常。然后同时按顺序添加简体中文和美国英文 , 这时系统读取的却是values-en文件夹而不是values默认的Strings.xml中的字符串,打印的语言也是“en-US”。后来找到解决方法就是:在res下添加values-zh-rZH这是才会显示中文,同时打印的语言是“zh-CN”。