7

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

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

4

1 回答 1

12

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);
}
于 2019-10-05T07:29:56.700 回答