Настройка Android Nightmode меняет язык ресурсов - PullRequest
1 голос
/ 17 октября 2019

Это эффект, который трудно описать.

Наше приложение для Android поддерживает два языка, однако мы не используем системный язык, но позволяем пользователю установить его в настройках. Затем, перед прикреплением BaseContext приложения, мы устанавливаем конфигурацию локали.

// in Application class
override fun attachBaseContext(base: Context) {
   super.attachBaseContext(LocaleHelper.onAttach(base))
}

// the LocaleHelper
fun onAttach(context: Context): Context {
   return setLocale(context, getPersistedLanguage(context), getPersistedCountry(context))
}

Таким образом, вызов attachBaseContext получает контекст, в котором локаль установлена, например, "de" вместо "en" - даже еслиустройство на английском языке.

Пока это прекрасно работает, и в зависимости от настроек все ресурсы, исходящие из контекста, находятся на этом языке. Однако теперь мы добавили еще одну настройку для ночного режима (т.е. предоставили пользователю возможность установить «тему» ​​в «обычном» или «темном режиме»).

По этой причине идея заключалась в том, чтобыустановите что-то вроде этого

if (enableDarkMode) {
  AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
} else {
  AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
}

в onCreate () приложения (мы также попробовали в Activity).

Однако, делая это, внезапно ресурсы (по крайней мере, некоторые)загружен с языком устройства. Пункты меню на языке устройства. Однако проверка Locale.getLanguage () дает мне настроенный язык и динамически называемые строки (например, context.getString (R.string.xyz)) также отображаются на правильно настроенном языке.

Это приводит к предположениючто ресурсы меню несколько (повторно) загружены (снова), но не соответствуют установленному Locale из JVM.

У кого-нибудь есть идеи, как найти эту ошибку? Что нам здесь не хватает? Ресурсы меню загружаются по-разному?

1 Ответ

0 голосов
/ 17 октября 2019

Я только что обнаружил хакерское решение, но в случае, если у кого-то есть такая же проблема, это может немного помочь:

Я добавил к активности в манифесте

android:configChanges="uiMode"

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

Поэтому, пожалуйста, дайте мне знать, если у вас есть какие-либо дополнительные намеки на то, что идет не так, когда вы позволяетеНочной режим системы / приложения меняется сам по себе.

...