在Android中以编程方式更改语言

时间:2017-09-04 09:59:14

标签: android localization android-8.0-oreo

我有多语言的Android应用程序。我需要在设备设置中设置与用户不同的语言。当我的应用程序启动时,用户可以选择首选语言。在android 7及更低版本中,我在我的应用程序类中使用updateconfuguration。但是这个解决方案在android 8上不起作用。我尝试在每个活动中使用attachBaseContext中的更新配置,但没有成功。

2 个答案:

答案 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对象。在我的情况下这个帮助。