我是这样做的:
context.getResources().getConfiguration().locale
如果目标是24,则不推荐使用 Configuration.locale
。所以我做了这个改动:
context.getResources().getConfiguration().getLocales().get(0)
现在它说它仅适用于minSdkVersion
24,因此我无法使用它,因为我的最小目标较低。
什么是正确的方法?
答案 0 :(得分:43)
检查您正在运行的版本并回退到已弃用的解决方案:
Locale locale;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
locale = context.getResources().getConfiguration().getLocales().get(0);
} else {
locale = context.getResources().getConfiguration().locale;
}
答案 1 :(得分:6)
您可以使用Locale.getDefault()
,这是获取当前Locale
的Java标准方式。
答案 2 :(得分:2)
在Configuration.java
中,有:
/**
* ...
* @deprecated Do not set or read this directly. Use {@link #getLocales()} and
* {@link #setLocales(LocaleList)}. If only the primary locale is needed,
* <code>getLocales().get(0)</code> is now the preferred accessor.
*/
@Deprecated public Locale locale;
...
configOut.mLocaleList = LocaleList.forLanguageTags(localesStr);
configOut.locale = configOut.mLocaleList.get(0);
所以基本上使用locale
基本上会返回用户设置的主语言环境。接受答案与直接阅读locale
完全相同。
但是,此区域设置不一定是获取资源时使用的区域设置。如果主要区域设置不可用,则可能是用户的辅助区域设置。
这是一个更正确的版本:
Resources resources = context.getResources();
Locale locale = Build.VERSION.SDK_INT >= Build.VERSION_CODES.N
? resources.getConfiguration().getLocales()
.getFirstMatch(resources.getAssets().getLocales())
: resources.getConfiguration().locale;
答案 3 :(得分:0)
这是一个使用 ConfigurationCompat
类的单行代码:
ConfigurationCompat.getLocales(context.getResources().getConfiguration()).get(0)