configuration.setLocale(语言环境)不适用于 AppCompatDelegate.setDefaultNightMode
configuration.setLocale(locale) doesn't work with AppCompatDelegate.setDefaultNightMode
如果我用 AppCompatDelegate.setDefaultNightMode
设置暗模式并且系统不是暗模式,那么 Configuration.setLocale
不起作用。
我更改语言环境,例如,从 En
更改为 It
,所有字符串仍然以系统语言显示。
如果我设置与系统相同的夜间模式(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);
}
如果我用 AppCompatDelegate.setDefaultNightMode
设置暗模式并且系统不是暗模式,那么 Configuration.setLocale
不起作用。
我更改语言环境,例如,从 En
更改为 It
,所有字符串仍然以系统语言显示。
如果我设置与系统相同的夜间模式(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);
}