Приложение не получает эффекта изменения локализации на Nougat API 7 ++

У меня есть специальный адаптер для моего spinner:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(context, android.R.layout.simple_spinner_item) {

      .............

    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    adapter.add(context.getResources().getString(R.string.value1));
    adapter.add(context.getResources().getString(R.string.value2));
    adapter.add(context.getResources().getString(R.string.hint));
    spinner.setAdapter(adapter);

Все работает, как и ожидалось, но адаптер списка, когда я меняю язык приложения, все получает эффект смены языка, но адаптер списка нет.

У меня есть ресурс для обоих языков.

Я меняю язык с помощью этого метода:

public  void setLocale(String lang) {
    Locale myLocale = new Locale(lang);
    Resources res = getResources();
    DisplayMetrics dm = res.getDisplayMetrics();
    Configuration conf = res.getConfiguration();
    conf.locale = myLocale;
    res.updateConfiguration(conf, dm);

}

После того, как я проверил случай на более низком устройстве, таком как lolipop, все заработало, текущая проблема с Android Oreo 8.0.

поскольку conf.locale = myLocale; устарел на уровне API 24.

Так что я не использовал conf.locale = myLocale; непосредственно. использование getLocales() а также setLocales(LocaleList), Если нужна только основная локаль, getLocales().get(0) сейчас предпочтительный метод доступа.

Также updateConfiguration устарел на уровне API 25, я использовал createConfigurationContext (Configuration overrideConfiguration) вместо.

Но это не сработало, я что-то упустил?

1 ответ

Решение

Эта проблема исправлена ​​после прохождения Действия context вместо applicationContext к spinnerAdapter,

Просто я поменял spinnerAdapter = new SpinnerAdapter(getApplicationContext()); вspinnerAdapter = new SpinnerAdapter(MainActivity.this);

A REF.

Другие вопросы по тегам