是否需要setSupportActionbar?

时间:2015-11-13 07:40:49

标签: android android-actionbar

使用新的Toolbar widget及其AppCompat(android.support.v7.widget.Toolbar)版本,是否需要再调用setSupportActionbar(工具栏)?或者调用setSupportActionbar有什么好处;现在我们可以设置标题,子标题,导航图标,导航图标点击监听器( getSupportActionBar()。setDisplayHomeAsUpEnabled(true)replacement ),菜单,菜单点击监听器(< strong>选项菜单替换)等直接在工具栏上,无需调用setSupportActionbar。

1 个答案:

答案 0 :(得分:0)

尽管setSupportActionbar()方法和ActionBar API仍然the documented way仍在实现应用栏,但它看起来像是将Toolbar与开发人员所熟悉的API结合使用的一种方式至。实际上,ActionBar API仅使事情复杂化,请以this article为例。

如今,当推荐使用单一活动架构和navigation component来实现Android应用程序时,使用setup a fragment toolbarNavigationUI非常容易,例如:

<!-- my_fragment.xml -->
<androidx.constraintlayout.widget.ConstraintLayout ...>

  <com.google.android.material.appbar.MaterialToolbar
    ...
    android:id="@+id/toolbar"
    app:menu="@menu/my_menu" />

</androidx.constraintlayout.widget.ConstraintLayout>
class MyFragment : Fragment() {
  ...

  override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)

    val navController = findNavController()
    binding.toolbar.setupWithNavController(navController)
    binding.toolbar.setOnMenuItemClickListener { ... }
  }
}

就这么简单,结果您将获得一个带有自动设置标题,后退按钮和选项菜单的工具栏。 Here您可以找到完整的GitHub示例,该示例演示了如何使用NavigationUI进行最小的工具栏设置。

那么,使用ActionBar API根本没有优势吗?也许我错了,但唯一有用的情况就是一个 appwide 工具栏。在这种情况下,您可以将工具栏放入活动中,并在每个片段中进行不同的设置,例如,通过覆盖onCreateOptionsMenu()。但是根据我的经验,每个片段之间的工具栏往往会有很大的不同,因此每个片段都有一个单独的工具栏会更容易,有关选择的讨论,请参见this thread。您还可以查看导航组件文档:Support app bar variations