Android 会重新启动活动,但区域设置配置更改由应用处理

Android restarts activity although locales configuration changes are handled by app

提问人:JacksOnF1re 提问时间:4/19/2023 更新时间:7/18/2023 访问量:368

问:

我按照路径在我的应用中实现每应用语言首选项。 如果用户是第一次打开应用程序,则会向用户显示一个用于选择一种可用语言的活动。

用户选择语言后,将调用 API 来 通知 Android 有关语言更改的信息。AppCompatDelegate

// 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 重新创建此活动,所以我在 Manifest 中添加了如下标志:android:configChanges="layoutDirection|locale"

    <activity
        android:name=".LanguageActivity"
        android:screenOrientation="portrait"
        android:configChanges="layoutDirection|locale"/>

但无论出于何种原因,android 都忽略了该标志,并且仍然重新创建我的活动,但只调用了第一次。 用户将看到一个奇怪的闪烁,然后她或他被导航到下一个活动。AppCompatDelegate.setApplicationLocales

它只会在第一次被忽略。如果我再次手动更改语言, 然后旗帜被尊重。

我需要注意的是,我选择退出自动区域设置存储。 因此,android 在第一个应用程序上不会有任何语言 开始,直到我进行交接。也许这与问题有关。

      <service
          android:name="androidx.appcompat.app.AppLocalesMetadataHolderService"
          android:enabled="false"
          android:exported="false">
          <meta-data
              android:name="autoStoreLocales"
              android:value="false" />
      </service>

有人有同样的经历吗?

安卓 android-appcompat

评论

1赞 Ankush 5/27/2023
我面临同样的问题。我知道很少有应用程序在生产环境中使用此 API,并在 Android 12 >设备上显示动画。我仍然发现它卡顿和令人不快的用户体验。
1赞 Sohaib Ahmed 6/8/2023
是的,面临同样的问题。清单应该管理,但不知何故它不是

答: 暂无答案