Я следовал по пути реализации языковых настроек для каждого приложения в своем приложении.
Если пользователь открывает приложение в первый раз, ему предоставляется действие по выбору одного из доступных языков.
После того, как пользователь выбрал язык, вызывается API AppCompatDelegate, чтобы
сообщить Android об изменении языка.
// This code will be called some time after onCreate()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
val selectedLanguageIso = "en"
val appLocale: LocaleListCompat = LocaleListCompat.forLanguageTags(selectedLanguageIso)
AppCompatDelegate.setApplicationLocales(appLocale)
}
Поскольку я не хочу, чтобы Android воссоздавал это действие, я добавил флаг
android:configChanges="layoutDirection|locale" в манифесте вот так:
Но по какой-то причине android игнорирует этот флаг и по-прежнему воссоздает мою активность, но только при первом вызове AppCompatDelegate.setApplicationLocales.
Пользователь увидит странное мерцание перед переходом к следующему действию.
Это будет игнорироваться только в первый раз. Если я вручную меняю язык во второй раз,
тогда флаг учитывается.
Нужно отметить, что я отказался от автоматического сохранения локалей.
Поэтому в Android не будет языка при первом запуске приложения
, пока я не выполню передачу. Возможно, это имеет отношение к проблеме.
Кто-нибудь испытывает то же самое?
Изменить. Добавить мой текущий вариант обходного решения
Мой текущий обходной путь:
Я использую InitializePerAppLanguageUseCase в ViewModel моего первого действия.
ViewModel:
init {
initPerAppLanguage()
//...
}
private fun initPerAppLanguage() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
initializePerAppLanguage() //
Подробнее здесь: https://stackoverflow.com/questions/760 ... handled-by