如何获取当前区域设置(API级别24)?

时间:2016-07-08 12:53:39

标签: android locale android-7.0-nougat

我是这样做的:

context.getResources().getConfiguration().locale
如果目标是24,则不推荐使用

Configuration.locale。所以我做了这个改动:

context.getResources().getConfiguration().getLocales().get(0)

现在它说它仅适用于minSdkVersion 24,因此我无法使用它,因为我的最小目标较低。

什么是正确的方法?

4 个答案:

答案 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)