配置`locale`变量已弃用 - Android

时间:2016-09-20 09:00:56

标签: android

我使用此代码在多种语言app中手动设置默认语言:

public static void setLanguage(Context context, String languageCode){
    Locale locale = new Locale(languageCode);
    Locale.setDefault(locale);
    Configuration config = new Configuration();
    config.locale = locale;  // Deprecated !!
    context.getApplicationContext().getResources().updateConfiguration(config,
            context.getResources().getDisplayMetrics());
}

所以现在我们不能通过config.locale设置语言环境,因为该变量将在API 24中被删除。

所以我看到另一种方法是设置:

config.setLocales();

区域设置

  

在API级别1中添加

     

区域设置区域设置

     

此字段在API中已弃用   24.请勿直接设置或阅读此内容。使用getLocales()和   setLocales(LocaleList)。如果只需要主要区域设置,   getLocales()。get(0)现在是首选访问器。

     

区域设置的当前用户首选项,对应于区域设置   资源限定符。

我还注意到setLocale(Locale)也是如此,但对于api 17及以上

我检查了setLocales(LocalList)文档,它以灰色标记,好像它也被弃用了!

所以可以解决这个问题!?

1 个答案:

答案 0 :(得分:28)

希望这有帮助,我还添加了吸气剂。

@SuppressWarnings("deprecation")
public Locale getSystemLocaleLegacy(Configuration config){
    return config.locale;
}

@TargetApi(Build.VERSION_CODES.N)
public Locale getSystemLocale(Configuration config){
    return config.getLocales().get(0);
}

@SuppressWarnings("deprecation")
public void setSystemLocaleLegacy(Configuration config, Locale locale){
    config.locale = locale;
}

@TargetApi(Build.VERSION_CODES.N)
public void setSystemLocale(Configuration config, Locale locale){
    config.setLocale(locale);
}

public static void setLanguage(Context context, String languageCode){
    Locale locale = new Locale(languageCode);
    Locale.setDefault(locale);
    Configuration config = new Configuration();
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        setSystemLocale(config, locale);
    }else{
        setSystemLocaleLegacy(config, locale);
    }
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1)
        context.getApplicationContext().getResources().updateConfiguration(config,
            context.getResources().getDisplayMetrics());
}

更新12/3/2016

由于现在不推荐使用context.getApplicationContext()。getResources()。updateConfiguration(),我强烈建议您查看this solution并采用不同的方法来覆盖Android系统配置。

更好的解决方案: https://stackoverflow.com/a/40704077/2199894