Переменная "locale" устарела - Android

Я использую этот код для установки языка по умолчанию вручную на нескольких языках:

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

Надеюсь, что это поможет, я также добавил получателей.

@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() теперь устарел, я настоятельно рекомендую вам проверить это решение и принять другой подход к перезаписывая конфигурацию системы Android.

Лучшее решение: fooobar.com/info/148517/...