Локаль приложения не меняется в версии ОС ниже Oreo - PullRequest
0 голосов
/ 07 марта 2020

Я использую приведенный ниже код для изменения локали приложения. это прекрасно работает в android O и позже, но не работает в android N и более старых версиях. где проблема?

public class CustomContextWrapper extends ContextWrapper {

    private CustomContextWrapper(Context base) {
        super(base);
    }

    public static CustomContextWrapper wrap(Context context, String lang) {

        Locale locale;

        if (lang.length() > 2) {
            String[] langWithRegion = lang.split("-");
            locale = new Locale(langWithRegion[0], langWithRegion[1]);
        } else
            locale = new Locale(lang);

        Locale.setDefault(locale);

        Configuration configuration = context.getResources().getConfiguration();
        configuration.setLocale(locale);
        configuration.setLayoutDirection(locale);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {

            LocaleList localeList = new LocaleList(locale);
            LocaleList.setDefault(localeList);
            configuration.setLocales(localeList);
        }

        return new CustomContextWrapper(context.createConfigurationContext(configuration));
    }
}

мой класс приложения

@Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(CustomContextWrapper.wrap(base,"fa"));
    }

и моя базовая активность

@Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(CustomContextWrapper.wrap(base,"fa"));
    }

1 Ответ

0 голосов
/ 07 марта 2020

ОК, после многих часов поиска и тестирования решений в stackoverflow, наконец, я нашел эту тему . Кажется, есть проблема (или, возможно, изменение поведения) в appcompat 1.1.0 . путем понижения appcompat до версии 1.0.2 и устранения проблемы с материалом до версии 1.0.0.

implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'com.google.android.material:material:1.0.0'
...