ActionBar vs Toolbar 或 ActionBar and Toolbar
Posted
技术标签:
【中文标题】ActionBar vs Toolbar 或 ActionBar and Toolbar【英文标题】:ActionBar vs Toolbar or ActionBar and Toolbar 【发布时间】:2016-03-14 17:58:17 【问题描述】:我已阅读有关 AppCompat 库中的工具栏及其所有功能的信息。我在 android 开发者博客 (here) 中注意到的一些事情是:
AppCompat 完全支持工具栏,并具有功能和 API 对等性 使用框架小部件。
他们还提到我们可以更好地控制它的外观。
但是,当我在 Android Studio 中添加一个活动时,我得到了这个:
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar_add_contacts"
android:layout_
android:layout_
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_
android:layout_
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay">
</android.support.v7.widget.Toolbar>
</android.support.design.widget.AppBarLayout>
这里的 Toolbar 在 AppBar 里面。 (ActionBar 和 AppBar 是一样的。不是吗?) 那有什么用。在一些博客中,我还读到 AppBar 可以替换为设计支持库的工具栏。
通常您会在工具栏之后获得 content_layout。所以我们将在工具栏之后有下面的行。
<include layout="@layout/content_myactivity" />
所以,一旦我遇到内容在工具栏上方(仅使用工具栏,不在 appbar 内)隐藏整个工具栏,并且仍然可点击的问题。所以我不得不在代码中将工具栏移到我的内容下方,让它出现在我的内容上方。
那么,用什么?工具栏?应用栏布局? AppBarLayout 内的工具栏?
每一个的用途是什么?
更新:
所以我已经在activity_layout 文件中添加了Toolbar。那为什么要使用setSupportActionBar(toolbar);
来设置工具栏和添加主题AppTheme.NoActionBar
。这是 Android Studio 中所有活动的正常行为。
用禁用窗口动作栏有什么用
<item name="windowActionBar">false</item>
并使用setSupportActionBar(toolbar)
设置它?
【问题讨论】:
这是我见过的最好的问题之一。来自 10 多年的专业发展,以及与许多编程语言和框架的合作,我不得不说 Android 的架构和设计真的很让人头疼。很多次我问自己,事情就不能更简单或更干净吗?我喜欢你的问题,因为问“为什么”是知识的一个非常重要的方面,所以不会发生那么多。 @SaeedNamati 谢谢 :) @SaeedNamati 我非常同意你的观点! android开发真的很糟糕。 【参考方案1】:AppBarLayout
是一个容器,您可以在其中放置ToolBar
、TabLayout
,也许还有其他东西。无论您对其余内容使用什么布局,所有这些都将显示在屏幕顶部。如果需要,您可以使用 Toolbar
而不使用 AppBarLayout
,但是您需要将其包含在您使用其余内容的 ViewGroup
中。并将它放在它的底部,这样它就不会被其他东西覆盖。
AppBar
可以帮助您避免这种情况,并提供一些附加功能,例如滚动行为。写着here btw.
另请注意,AppBarLayout
在很大程度上取决于在 CoordinatorLayout
中被用作直接子代。如果您在不同的ViewGroup
中使用AppBarLayout
,它的大部分功能都将不起作用。
【讨论】:
谢谢,所以 AppBarLayout 可以包含所有正常的小部件,如 Relativelayout、ImageView、TextView 等? 认为它是一个垂直的LinearLayout。所以是的。【参考方案2】:AppBarLayout 是一个垂直的LinearLayout
,它实现了 Material Design 应用栏概念的许多功能,即滚动手势。
儿童应通过setScrollFlags(int)
和相关的布局xml 属性提供他们想要的滚动行为:app:layout_scrollFlags。
此视图在很大程度上取决于在 CoordinatorLayout
中用作直接子级。如果您在不同的ViewGroup
中使用 AppBarLayout,它的大部分功能都将不起作用。
AppBarLayout 还需要一个单独的滚动兄弟,以便知道何时滚动。绑定是通过AppBarLayout.ScrollingViewBehavior
行为类完成的,这意味着您应该将滚动视图的行为设置为AppBarLayout.ScrollingViewBehavior
的实例。包含完整类名的字符串资源可用。
您还可以像下面这样实现AppBarLayout
的多个孩子
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_
android:layout_>
<android.support.v4.widget.NestedScrollView
android:layout_
android:layout_
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<!-- Your scrolling content -->
</android.support.v4.widget.NestedScrollView>
<android.support.design.widget.AppBarLayout
android:layout_
android:layout_>
<android.support.v7.widget.Toolbar
...
app:layout_scrollFlags="scroll|enterAlways"/>
<android.support.design.widget.TabLayout
...
app:layout_scrollFlags="scroll|enterAlways"/>
</android.support.design.widget.AppBarLayout>
来源:AppBarLayout
另见Structure of AppBarLayout
【讨论】:
这是来自 android 开发者网站的准确副本 是的。我已经在我的回答中给出了参考。我在我的答案中添加了代码和描述,这将有助于在主链接内容发生更改或可能被删除的情况下。以上是关于ActionBar vs Toolbar 或 ActionBar and Toolbar的主要内容,如果未能解决你的问题,请参考以下文章
Android Toolbar使用及Fragment中的Toolbar处理