Приложение не получает эффекта изменения локализации на 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);