不再需要 setSupportActionbar 了吗?
Posted
技术标签:
【中文标题】不再需要 setSupportActionbar 了吗?【英文标题】:Is setSupportActionbar required anymore? 【发布时间】:2016-02-14 17:52:57 【问题描述】:引入了新的Toolbar widget 并且它的AppCompat (android.support.v7.widget.Toolbar) 版本可用,是否还需要调用setSupportActionbar(toolbar)?或者调用 setSupportActionbar 有什么好处吗?现在我们可以设置标题、副标题、导航图标、导航图标点击监听器(getSupportActionBar().setDisplayHomeAsUpEnabled(true) 替换)、菜单、菜单点击监听器(选项菜单替换)等直接在工具栏上,而无需调用 setSupportActionbar。
【问题讨论】:
medium.com/@ZakTaccardi/… 谢谢@eee ...所以,只有当我们想要支持选项菜单等较旧的 API 时,我们才应该“setSupportActionbar”。除了这个“setSupportActionbar”有没有额外的优势? 【参考方案1】:然而setSupportActionbar() 方法和ActionBar API 仍然是the documented way 实现应用栏,它看起来更像是一种将Toolbar 与开发人员习惯的熟悉API 一起使用的方式。实际上,ActionBar API 只会使事情变得复杂,请查看 this article 的示例。
如今,当单一 Activity 架构和 navigation component 被推荐用于实现 Android 应用程序时,使用 NavigationUI 库来 setup a fragment toolbar 非常容易,例如:
<!-- 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 没有任何好处吗?也许我错了,但我认为它有用的唯一情况是单个 应用程序范围 工具栏。在这种情况下,您可以将工具栏放入您的活动中并在每个片段中进行不同的设置,例如通过覆盖onCreateOptionsMenu()
。但是根据我的经验,片段之间的工具栏往往会有很大差异,因此为每个片段设置一个单独的工具栏会更容易,this thread 中讨论了选择。也可以看看导航组件文档:Support app bar variations。
【讨论】:
以上是关于不再需要 setSupportActionbar 了吗?的主要内容,如果未能解决你的问题,请参考以下文章
Android学习——setSupportActionbar传入实例报错