【问题标题】:Jetpack Navigation: Hide label in toolbarJetpack 导航:在工具栏中隐藏标签
【发布时间】:2019-08-17 10:00:59
【问题描述】:

新的 Jetpack Navigation 使用 navigation.xml 文件中的 label 属性根据显示的目标片段自动更新工具栏的标题。

我不希望在我的目标片段之一中显示任何标题,因此我可以在此位置放置 SearchView

我已经尝试过android:label="@null",但工具栏的标题只是退回到应用程序的标题。在onCreateOptionsMenu() 回调中调用menu.clear() 也没有效果。

如何才能从工具栏菜单中完全删除特定目标片段中的标题?

【问题讨论】:

    标签: android android-toolbar android-jetpack android-architecture-navigation


    【解决方案1】:

    作为替代方案,updating UI components with NavigationUI 的 android 指南表明您可以像这样使用 addOnDestinationChangedListener

    navController.addOnDestinationChangedListener { _, _, _ ->
        toolbar.title = ""
    }
    

    此解决方案不需要清除每个片段中的标题。

    【讨论】:

      【解决方案2】:

      一种解决方案是在您的特定片段中隐藏操作栏,并在片段内创建一个新的ActionBar,并使用您的搜索视图等。根据它是支持还是普通操作栏,onCreateView 中的内容会是这样的:

      val act: MainActivity = activity as MainActivity
          act.supportActionBar?.hide()
      

      或者只是activity?.actionBar?.hide()

      显然,如上所述,您必须在片段布局中设置自己的操作栏。您可以使用类似 com.google.android.material.appbar.AppBarLayout 和内部 androidx.appcompat.widget.Toolbar 的东西,或任何自定义布局,无论是来自库还是您自己。

      【讨论】:

      • 感谢您的建议。我相信您的解决方案应该可以工作,但不幸的是,我失去了汉堡菜单图标和向上按钮之间的过渡动​​画!
      • 在这种情况下,您还可以尝试访问操作栏并将标题更改为空吗? actionBar?.title = ""
      • 这行得通!非常感谢!还在想为什么用 label 属性设置一个空标题没有同样的效果...
      • 我没有资格对此发表评论,但如果您将导航库设置为空,似乎导航库只是默认为应用程序标题。编辑:一个不是很干净但你也可以使用的技巧是将标签设置为“”(一个空格)
      • 是的!我只是不明白谷歌背后的设计理念。
      【解决方案3】:

      删除navigation.xml中android:label=""中的值

          <fragment
          android:id="@+id/navigation_profile"
          android:name="com.example.app.profile.ProfileFragment"
          android:label=""
          tools:layout="@layout/profile_fragment" >
      

      【讨论】:

      • 不确定这个答案是否会增加这里的讨论
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-14
      • 2011-04-15
      相关资源
      最近更新 更多