如何更改导航控制器中目的地的标签属性?
How to change label attribute of a destination in navigation controller?
我正尝试在 Android
中使用导航控制器
如上图所示,我将目标的 label
属性设置为 'Home'。
这个标签将在我的工具栏中显示为标题。
我可以以编程方式更改该标签吗?因为我想动态设置工具栏标题。
我尝试使用 toolbar.title = "some title here"
更改工具栏标题,但它总是会与该标签的标题重叠。
那么如何解决这个问题?
在您的 activity 中进行操作,如下所示,它对我有用:
setSupportActionBar(toolbar)
val navController = findNavController(R.id.nav_controller_fragment)
val appBarConfiguration = AppBarConfiguration(navController.graph)
setupActionBarWithNavController(navController, appBarConfiguration)
navController.addOnDestinationChangedListener { controller, destination, arguments ->
when (destination.id) {
R.id.mainFragment -> toolbar.title = "ok"
else -> {
toolbar.title = "General"
}
}
}
或者,如果您想从您的片段中进行更改,请执行以下操作:
override fun onStart() {
super.onStart()
(activity as MainActivity).toolbar.title = "changed"
}
只需删除 nav_graph.xml
中该片段的标签,然后在 fragment/activity 中为工具栏设置标题。
我为此苦苦挣扎,所有解决方案都不适合我。但经过广泛研究后,我发现了以下解决方案;
创建字符串
<string name="my_label">You are on {label}</string>
在您的 nav-graph.xml
文件中。使用上面的字符串作为标签并创建一个参数,它应该与标签同名
<fragment
android:id="@+id/your_fragment"
.....
android:label="@string/my_label">
<argument
android:name="label"
app:argType="string" />
</fragment>
因此,在您的片段中,您可以像这样传递标签名称;
val direction = YourFragmentDirections
.action_to_your_fragment(label = "forum")
findNavController().navigate(direction)
中提琴,很有魅力
我正尝试在 Android
中使用导航控制器如上图所示,我将目标的 label
属性设置为 'Home'。
这个标签将在我的工具栏中显示为标题。 我可以以编程方式更改该标签吗?因为我想动态设置工具栏标题。
我尝试使用 toolbar.title = "some title here"
更改工具栏标题,但它总是会与该标签的标题重叠。
那么如何解决这个问题?
在您的 activity 中进行操作,如下所示,它对我有用:
setSupportActionBar(toolbar)
val navController = findNavController(R.id.nav_controller_fragment)
val appBarConfiguration = AppBarConfiguration(navController.graph)
setupActionBarWithNavController(navController, appBarConfiguration)
navController.addOnDestinationChangedListener { controller, destination, arguments ->
when (destination.id) {
R.id.mainFragment -> toolbar.title = "ok"
else -> {
toolbar.title = "General"
}
}
}
或者,如果您想从您的片段中进行更改,请执行以下操作:
override fun onStart() {
super.onStart()
(activity as MainActivity).toolbar.title = "changed"
}
只需删除 nav_graph.xml
中该片段的标签,然后在 fragment/activity 中为工具栏设置标题。
我为此苦苦挣扎,所有解决方案都不适合我。但经过广泛研究后,我发现了以下解决方案;
创建字符串
<string name="my_label">You are on {label}</string>
在您的 nav-graph.xml
文件中。使用上面的字符串作为标签并创建一个参数,它应该与标签同名
<fragment
android:id="@+id/your_fragment"
.....
android:label="@string/my_label">
<argument
android:name="label"
app:argType="string" />
</fragment>
因此,在您的片段中,您可以像这样传递标签名称;
val direction = YourFragmentDirections
.action_to_your_fragment(label = "forum")
findNavController().navigate(direction)
中提琴,很有魅力