我有多语言的Android应用程序。我需要在设备设置中设置与用户不同的语言。当我的应用程序启动时,用户可以选择首选语言。在android 7及更低版本中,我在我的应用程序类中使用updateconfuguration。但是这个解决方案在android 8上不起作用。我尝试在每个活动中使用attachBaseContext中的更新配置,但没有成功。
答案 0 :(得分:3)
@codespy有正确的想法,但提供更多细节:
我在我的应用中遇到了完全相同的问题。我最初认为问题是使用这种不赞成使用的设置自定义语言的方法:
Locale.setDefault(newLocale);
Configuration config = new Configuration();
// TODO fix deprecation issues
config.locale = newLocale;
getResources().updateConfiguration(config, getResources().getDisplayMetrics());
所以我尝试在createConfigurationContext的帮助下使用this answer,但这也没有用(而且还有一些问题要复杂得多)。
经过大量调试后,我注意到了一些事情:
MyAdapter adapter = new MyAdapter(getApplicationContext(), list);
在预感中,我将getApplicationContext()
替换为getContext()
,突然我的项目列表使用了正确的语言。
原来Oreo的getApplicationContext()
不再尊重您设置的自定义区域设置。您必须改为使用活动的上下文。
(请注意:我知道我不应该使用应用程序上下文,但这是一个有许多此类问题的遗留应用程序。修复它们是我每天的持续斗争。)
答案 1 :(得分:-1)
请使用activity.getResource()并使用此Resource对象。在我的情况下这个帮助。