我有一个多语言的安卓应用,需要设置与用户设备设置不同的语言。当我的应用启动时,用户可以选择首选语言。在Android 7及以下版本中,我在应用程序类中使用updateconfuguration方法。但是,在Android 8上,这个解决方案不起作用。我尝试在每个活动的attachBaseContext方法中使用update configuration,但没有成功。
我有一个多语言的安卓应用,需要设置与用户设备设置不同的语言。当我的应用启动时,用户可以选择首选语言。在Android 7及以下版本中,我在应用程序类中使用updateconfuguration方法。但是,在Android 8上,这个解决方案不起作用。我尝试在每个活动的attachBaseContext方法中使用update configuration,但没有成功。
@codespy 的想法是正确的,但为了提供更多细节:
我的应用程序也遇到了同样的问题。最初,我认为问题在于使用此不推荐的设置自定义语言的方法:
Locale.setDefault(newLocale);
Configuration config = new Configuration();
// TODO fix deprecation issues
config.locale = newLocale;
getResources().updateConfiguration(config, getResources().getDisplayMetrics());
于是我试着使用createConfigurationContext,参考了这个答案,但那也没有起作用(而且还非常复杂,有几个陷阱)。
经过大量的调试,我注意到了一些东西:
MyAdapter adapter = new MyAdapter(getApplicationContext(), list);
getContext()
替换了getApplicationContext()
,然后我的项目列表突然使用了正确的语言。getApplicationContext()
不再尊重您设置的自定义区域设置。您必须使用活动的上下文。