使用 Navigation 组件 API 24+ 时如何更改语言

6
TL;DR 我们想要在同一个活动中显示多个片段,但是希望更改 API 24+ 片段的语言环境。
我们正在使用 NavHostFragment 和 start_up_nav_graph.xml。该图形有多个片段,例如登录、Onboarding、GDPR 等。
在这个流程中,如果我们发现您是德国用户,则尝试将您的语言环境更改为德语。但在当前情况下,即将到来的所有片段(例如 Onboarding 和 GDPR)都将以设备的语言环境而非德语显示。
我们无法像 answer 中那样在活动中使用 attachBaseContext,因为该活动已经被创建。
2个回答

1
我正在经历同样的痛苦,兄弟。我试图做这个。
NavigationUI.setupWithNavController(mToolbar,mNavController, mAppBarConfiguration);

但这也没有帮助,因为工具栏标题和导航抽屉项正在使用旧资源,当我执行activity.recreate()时,实际上正在发生,但当您关闭应用程序并再次启动它时,仍然存在同样的问题...


1
我所做的是将其分为两个部分,第1部分是启动流程,其中我不知道用户的语言,第2部分是我知道用户的语言。一旦我获得了这些信息,我就开始第2部分,然后可以像通常一样attachBaseContext。希望这有所帮助。 - john-salib

0

这是我能想到的最好方案。

注意:这只是一种hack而不是正确的解决方案。

一旦更改了语言,请将语言保存在sharepreferences中,在您拥有的activity中覆盖所有必需的方法,使用来自share preferences的语言。向Activity发送事件,在活动中获取事件后,可以执行以下两个操作之一:

选项1:

recreate() 。 这个方法效果很好,但是存在一个与片段backstack相关的问题。

选项2:

finish()
intent.putExtra("LANGUAGE_CHANGE", true)
startActivity(intent)   // or getIntent() if using java
overridePendingTransition(0, 0)

在onCreate中,如果您在意图中收到LANGUAGE_CHANGE,则转到所需的片段。


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