使用导航组件API 24+时更改语言

时间:2019-08-09 08:54:46

标签: android android-fragments localization android-architecture-components android-architecture-navigation

TL; DR我们希望更改要显示的片段的语言环境(API 24+),而所有这些片段都将位于同一活动中。

我们正在使用NavHostFragmentstart_up_nav_graph.xml。 该图有多个片段,即登录,入职,GDPR ..etc

在此流程中,如果登录后我们发现您是德语用户,则尝试将您的语言环境更改为德语。 在当前情况下,所有即将出现的片段(例如,入职和GDPR)都将显示在设备的语言环境中,而不是德语。

我们无法在answer这样的活动中使用attachBaseContext,因为该活动已经创建。

2 个答案:

答案 0 :(得分:0)

我正在经历同一个痛苦的兄弟。我试图做

NavigationUI.setupWithNavController(mToolbar,mNavController, mAppBarConfiguration);

但是这也无济于事,因为工具栏标题和导航抽屉项正在使用旧资源,当我执行activity.recreate()时实际上正在发生,但是当您关闭应用程序并再次重新启动它时,这是同样的问题... < / p>

答案 1 :(得分:0)

这是我能想到的最好的结果。

注意:-这只是黑​​客行为,不是正确的解决方案

更改语言后,将语言保存在sharepreferences中,覆盖活动中所有必需的方法,使用share preferences中的语言。将事件发送到“活动”和“活动中”,一旦获得活动中的事件,就可以执行以下2件事之一

选项1:-

recreate()。效果很好,但片段堆栈有问题。

选项2:-

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

在oncreate中,如果您有LANGUAGE_CHANGE的意图,请转到所需的片段。