configuration.setLocale(locale)与AppCompatDelegate.setDefaultNightMode

时间:2019-09-17 11:51:00

标签: android setlocale android-10.0 android-dark-theme

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

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

1 个答案:

答案 0 :(得分:6)

科特林溶液

override fun applyOverrideConfiguration(overrideConfiguration: Configuration?) {
    if (overrideConfiguration != null) {
        val uiMode = overrideConfiguration.uiMode
        overrideConfiguration.setTo(baseContext.resources.configuration)
        overrideConfiguration.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);
}