AppCompatDelegate.setApplicationLocales() 在从系统默认语言切换到任意其他语言时,会重启Activity,尽管已经进行了配置处理
类似未解决的问题:
我的活动有 layoutDirection|locale,本应防止活动重启,但无论如何还是会发生。(至少在Android 13上)
从 en 切换到 System default,或从 zh-cn 切换到 System default 时不会发生
我的语言切换代码:
if (it.id != "[]") {
AppCompatDelegate.setApplicationLocales(
LocaleListCompat.forLanguageTags(it.id)
) // the issue happens here
} else {
AppCompatDelegate.setApplicationLocales(
LocaleListCompat.getEmptyLocaleList()
)
}
解决方案
在使用 AppCompatDelegate.setApplicationLocales() 时,这是预期行为,并非你的配置中的错误。
android:configChanges="locale|layoutDirection"
从系统默认到自定义区域设置切换时,活动仍然会被重新创建。
这是因为 setApplicationLocales() 在应用程序层面更新了区域设置,而不仅仅是活动的配置。内部,它强制重新绑定资源并触发活动重新创建,以正确应用本地化资源。
要点:
ConfigChanges 无法阻止由 AppCompatDelegate 引发的重新创建。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。