我有一个非常奇怪的问题,如果我更改语言并重新创建它会将白天/夜晚切换回系统默认值,而当我更改白天/夜晚时,它会将语言更改回系统默认值。所以,如果我把这些函数放在 OnCreate 事件中,那将是一个死循环。如果我单独使用这些功能,它们会按预期工作。但我不能同时改变两者。
这就是我更改语言的方式:
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1) public void SetLanguage()
{
Locale locale = new Locale("zh");
Locale.setDefault(locale);
Configuration configuration = new Configuration();
configuration.setLocale(locale);
getBaseContext().getResources().updateConfiguration(configuration, getBaseContext().getResources().getDisplayMetrics());
recreate();
}
这就是我更改日/夜设置的方式:
public void SetTheme(){
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
}
//This method automatically recreates the activity, even if I don't have it specified
它们都已放置OnCreate
,我已经尝试在前后放置它们,super.onCreate(savedInstanceState)
但结果是一样的。基本上正在发生的事情是一个无限循环,它们都相互影响。语言在重新创建时将深色主题更改为亮,而深色主题在重新创建时将语言更改回英语。所以它永远发生。有没有办法同时改变两者并只重新创建一次?谢谢!
编辑:另外,我尝试recreate()
在设置语言后删除。但是如果主题在系统设置中已经是黑暗的,那么它将不会重新创建并且不会出现语言更改。这不是一个理想的解决方案。我希望有一种方法可以同时改变两者,而且recreate()
只改变一次。或者,如果有另一种更合适的方法来处理这个问题。因为很多应用都有这个功能。再次感谢你!