新的Jetpack导航使用label
文件中的navigation.xml
属性,根据显示的目标片段自动更新工具栏的标题。
我不想在任何一个目标片段中显示任何标题,因此我可以在该位置放一个SearchView
。
我已经尝试过android:label="@null"
,但是工具栏的标题只是回退到应用程序的标题。在menu.clear()
回调中调用onCreateOptionsMenu()
也无效。
如何仅从特定目标片段中完全从工具栏菜单中删除标题?
答案 0 :(得分:1)
作为替代方案,updating UI components with NavigationUI的android准则显示您可以像这样使用addOnDestinationChangedListener
:
navController.addOnDestinationChangedListener { _, _, _ ->
toolbar.title = ""
}
此解决方案不需要清除每个片段中的标题。
答案 1 :(得分:0)
一种解决方案是将操作栏隐藏在您特定的片段中,并在片段中用您的searchview等创建一个新的ActionBar
。根据是支持栏还是普通的操作栏,onCreateView
中将出现以下内容:
val act: MainActivity = activity as MainActivity
act.supportActionBar?.hide()
或仅activity?.actionBar?.hide()
很显然,您必须如上所述在片段布局中设置自己的操作栏。您可以在内部使用com.google.android.material.appbar.AppBarLayout
之类的androidx.appcompat.widget.Toolbar
之类的东西,也可以使用任何自定义布局,无论是来自库还是您自己。
答案 2 :(得分:-2)
在Navigation.xml中删除android:label=""
中的值
<fragment
android:id="@+id/navigation_profile"
android:name="com.example.app.profile.ProfileFragment"
android:label=""
tools:layout="@layout/profile_fragment" >