android 辅助开发7.0,Android 项目开发填坑记 - 获取系统语言(兼容7.0)

本文探讨了Android 7.0及以上版本中系统语言规则的变化,如何正确处理`getResources().getConfiguration().locale`的废弃问题,以及如何处理LocaleList对象返回的顺序不稳定性,以确保获取准确的用户界面语言设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果移动端访问不佳,请访问–> Github版

关键词:Android7.0 、系统语言 、顺序不一致

获取系统当前语言是一个比较常用的功能,在 Android 7.0 系统上旧函数获取到的当前系统语言并不正确,或者说从 Android 7.0 起,Android 系统语言的规则变了。

背景

下面是未适配 Android 7.0 的代码:

// 获取 Locale 的方式有二

Locale locale = getResources().getConfiguration().locale;

Locale locale = Locale.getDefault();

// 获取当前系统语言

locale.getLanguage();

由于仅仅根据 getLanguage() 无法全面的了解当前的系统语言信息,比如简体中文和繁体中文的 Language 都是 zh,所以还需要 getCountry() 方法获取地区信息,我们就能得到 zh-CN 和 zh-HK/zh-TW 。

总结一下就是:

// 获取 Locale 的方式有二

Locale locale = getResources().getConfiguration().locale;

Locale locale = Locale.getDefault();

// 获取当前系统语言

String lang = locale.getLanguage() + "-" + locale.getCountry();

但是,在 Android 7.0 上:getResources().getConfiguration().locale 被标记为 deprecated 了,所以初步适配后是:

Locale locale;

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {

locale = getResources().getConfiguration().getLocales().get(0);

} else {

locale = getResources().getConfiguration().locale;

}

//或者仅仅使用 locale = Locale.getDefault(); 不需要考虑接口 deprecated(弃用)问题

String lang = locale.getLanguage() + "-" + locale.getCountry();

从 Android 7.0 起使用的getResources().getConfiguration().getLocales() 返回的是一个 LocaleList 对象,它包含 >=1 个 Locale,内容项可由用户增删,顺序可由用户调整。但是,此接口返回的语言顺序和用户定义的顺序不一定一致!

测试语言顺序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值