如果我用 AppCompatDelegate.setDefaultNightMode 设置了黑暗模式并且系统不是黑暗的,那么 Configuration.setLocale 就不起作用。
我更改了语言环境,例如,从 En 更改为 It ,所有字符串仍以系统语言显示。

如果我将系统设置为相同的 NightMode(Android 10),则没有问题。
android 9 或更低版本的相同问题:如果我在我的应用程序中设置了黑暗模式并更改了上下文语言,则 Activity 会根据系统语言显示文本。

最佳答案

Kotlin 解决方案

override fun applyOverrideConfiguration(overrideConfiguration: Configuration?) {
    overrideConfiguration?.let {
        val uiMode = it.uiMode
        it.setTo(baseContext.resources.configuration)
        it.uiMode = uiMode
    }
    super.applyOverrideConfiguration(overrideConfiguration)
}

Java解决方案
@Override
public void applyOverrideConfiguration(Configuration overrideConfiguration) {
    if (overrideConfiguration != null) {
        int uiMode = overrideConfiguration.uiMode;
        overrideConfiguration.setTo(getBaseContext().getResources().getConfiguration());
        overrideConfiguration.uiMode = uiMode;
    }
    super.applyOverrideConfiguration(overrideConfiguration);
}

关于android - configuration.setLocale(locale)不适用于AppCompatDelegate.setDefaultNightMode,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57973627/

10-09 12:41