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

3

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


请查看此帖子:链接--> https://stackoverflow.com/questions/45088039/set-different-language-in-android-studio/45088145#45088145 - yash786
2
欢迎来到Stack Overflow。请提供一些关于您的具体问题的代码,这将证明您已经尝试了多少并且它将帮助其他成员更好地理解您的问题,同时,您将为他们提供一个问题的背景。请查看这些链接:https://stackoverflow.com/help/mcve和https://stackoverflow.com/help/how-to-ask。 - Kenzo_Gilead
1
我知道他的意思,因为我也面临着同样的问题。对于Android 7及以下版本有效的解决方案在Android 8上不起作用。Michael,你找到解决方案了吗?我正在调查,弄清楚后会发布更新。 - AutonomousApps
你解决了这个问题吗? - diordna
@MichaelDrdlíček 只需在基本活动类中使用它。但是,您的意思是它会破坏自动填充框架吗? - AutonomousApps
显示剩余2条评论
2个回答

5

@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(),然后我的项目列表突然使用了正确的语言。
事实证明,Oreo的getApplicationContext()不再尊重您设置的自定义区域设置。您必须使用活动的上下文。
(请注意:我知道我不应该在这里使用应用上下文,但这是一个存在许多这类问题的传统应用程序。修复它们是我每天持续的挑战。)

非常感谢,你刚刚救了我的一天 :) - Wael Abo-Aishah
在运行仪器化/UI测试时遇到了类似的问题。通过使用InstrumentationRegistry.getTargetContext()而不是InstrumentationRegistry.getContext()解决了这个问题。感谢提示。 - Gandora

-1
请使用activity.getResource()并使用此Resource对象。在我的情况下,这很有帮助。

1
这不是一个清晰的解决方案,请考虑添加一些说明,例如如何使用Resource对象。 - Luca Murra

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接