3 回答
TA贡献1806条经验 获得超5个赞
我在Android 4.1.2设备上检查了Locale方法,结果如下:
Locale.getDefault().getLanguage() ---> en
Locale.getDefault().getISO3Language() ---> eng
Locale.getDefault().getCountry() ---> US
Locale.getDefault().getISO3Country() ---> USA
Locale.getDefault().getDisplayCountry() ---> United States
Locale.getDefault().getDisplayName() ---> English (United States)
Locale.getDefault().toString() ---> en_US
Locale.getDefault().getDisplayLanguage()---> English
TA贡献1893条经验 获得超10个赞
对我有用的是:
Resources.getSystem().getConfiguration().locale;
Resource.getSystem()返回一个全局共享的Resources对象,该对象仅提供对系统资源的访问(没有应用程序资源),并且没有为当前屏幕配置(不能使用维度单位,不会根据方向更改等)。
由于getConfiguration.locale现已弃用,因此在Android Nougat中获取主要语言环境的首选方法是:
Resources.getSystem().getConfiguration().getLocales().get(0);
为了保证与以前的Android版本的兼容性,可能的解决方案是一个简单的检查:
Locale locale;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
locale = Resources.getSystem().getConfiguration().getLocales().get(0);
} else {
//noinspection deprecation
locale = Resources.getSystem().getConfiguration().locale;
}
更新
从支持库开始,26.1.0您不需要检查Android版本,因为它提供了向后兼容的方便方法getLocales()。
只需致电:
ConfigurationCompat.getLocales(Resources.getSystem().getConfiguration());
- 3 回答
- 0 关注
- 727 浏览
添加回答
举报