不再需要 setSupportActionbar 了吗?

Ani*_*ngh 6 android android-actionbar

随着新的Toolbar 小部件的引入以及它的 AppCompat (android.support.v7.widget.Toolbar) 版本可用,是否需要再调用 setSupportActionbar(toolbar) ?或者调用setSupportActionbar有什么好处;现在我们可以直接设置标题、副标题、导航图标、导航图标点击侦听器(getSupportActionBar().setDisplayHomeAsUpEnabled(true) 替换)、菜单、菜单点击侦听器(选项菜单替换)等工具栏,而无需调用 setSupportActionbar。

Val*_*kov 6

然而setSupportActionbar()方法和ActionBar API 仍然是实现应用栏的记录方式,它看起来更像是一种通过开发人员习惯的熟悉的 API来使用Toolbar 的方式。实际上,ActionBar API 通常只会使事情变得复杂,请查看本文的示例。

如今,当单个活动架构和导航组件被推荐为实现 Android 应用程序的方法时,使用NavigationUI库设置片段工具栏非常容易,例如:

<!-- 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>
Run Code Online (Sandbox Code Playgroud)
class MyFragment : Fragment() {
  ...

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

    val navController = findNavController()
    binding.toolbar.setupWithNavController(navController)
    binding.toolbar.setOnMenuItemClickListener { ... }
  }
}
Run Code Online (Sandbox Code Playgroud)

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

那么,使用 ActionBar API 就没有任何优势了吗?也许我错了,但我认为它有用的唯一情况是单个应用程序范围的工具栏。在这种情况下,您可以将工具栏放入您的活动中,并在每个片段中以不同的方式设置它,例如通过覆盖onCreateOptionsMenu(). 但根据我的经验,片段之间的工具栏往往会有很大差异,因此为每个片段提供单独的工具栏会更容易,该选择将在本线程中讨论。您还可以查看导航组件文档:支持应用栏变体