为什么每个应用程序语言在 Android 13 之前版本中无法与应用程序上下文一起使用

Lin*_*and 10 android android-13

我正在尝试实现 Android 13 中引入的按应用程序语言功能。我正在使用 AppCompatDelegate.setApplicationLocales,它在 Android 13 上运行得很好。在 Android 12 上,如果我使用活动上下文而不是应用程序上下文,它就可以运行。以下活动片段在 Android 12 上产生不同的输出。

Log.d(TAG, applicationContext.getString(R.string.settings_change_button))
Log.d(TAG, getString(R.string.settings_change_button))
Run Code Online (Sandbox Code Playgroud)

第一行以电话语言打印,第二行以应用程序语言打印。我添加了 AppLocalesMetadataHolderService,如下所示https://developer.android.com/guide/topics/resources/app-languages#android12-impl

我应该做其他事情来让应用程序上下文使用应用程序语言吗?

Lin*_*and 10

不幸的是,这似乎是预期的行为,导致此功能对我来说毫无用处。https://issuetracker.google.com/issues/243457462#comment2

编辑:如果您直接使用 ContextCompat.getContextForLanguage(applicationContext) 而不是 applicationContext,则在https://developer.android.com/jetpack/androidx/releases/core#1.11.0中修复。https://developer.android.com/reference/androidx/core/content/ContextCompat#getContextForLanguage(android.content.Context)