0

我的设备语言是英语(语言环境是 en-US)。在我的应用中,用户可以通过resource.updateConfiguration(). 我知道这在 API 25 中已被弃用,但我想要的行为是用户可以在不重新启动的情况下以编程方式更改语言,所以我使用这种弃用的方法而不是context.createConfigurationContext(),并在更新配置后重新加载所有资源。

但是当我启动/完成一个与当前活动(MainActivity)具有不同窗口大小的活动(NewActivity)时,在清单中具有以下属性:

<activity
     android:name=".MainActivity"
     android:launchMode="singleTask">
     <intent-filter>
         <action android:name="android.intent.action.MAIN"/>
         <category android:name="android.intent.category.LAUNCHER"/>
     </intent-filter>
</activity>

<activity
     android:name=".NewActivity"
     android:maxAspectRatio="2.1" // My device longer than 2.1
     android:excludeFromRecents="true"
     android:launchMode="singleTask"
     android:resizeableActivity="false"
     android:taskAffinity="">
</activity>

MainApplication 和 MainActivity 资源配置的语言环境被重置为 en-US 而不是我之前更新的内容,并且LocaleList.getDefault()也被重置。我可以看到上下文资源的配置对象与更新前相同,但它们的属性发生了变化:语言环境和 winConfig(保持应用绑定),没有收到任何 onConfigurationChange() 回调。

Android 11 中的气泡也是如此。当我启动/销毁气泡对话时,我的应用中的每个上下文的语言环境都会重置。

这是Android的正常行为吗?我没有找到任何关于此的文件。有什么方法可以知道上下文的语言环境何时发生变化?

4

0 回答 0