ActionBar与工具栏或ActionBar和工具栏

时间:2015-12-09 12:46:29

标签: android android-layout android-actionbar android-appcompat android-design-library

我已经阅读了AppCompat Library中的工具栏及其所有功能。我在Android开发人员博客(here)中注意到的一些事情是:

  

AppCompat完全支持工具栏,并具有功能和API奇偶校验   使用框架小部件。

他们还提到我们可以更好地控制它的外观和外观。

但是,当我在Android Studio中添加活动时,我得到了这个:

<android.support.design.widget.AppBarLayout
    android:id="@+id/appbar_add_contacts"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/AppTheme.AppBarOverlay">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:popupTheme="@style/AppTheme.PopupOverlay">

    </android.support.v7.widget.Toolbar>

</android.support.design.widget.AppBarLayout> 

此处工具栏位于AppBar中。 (ActionBar和AppBar是一样的。不是吗?)有什么用处。在一些博客中,我也读到AppBar可以替换为设计支持库的工具栏。

通常,在工具栏后面会显示content_layout。所以我们将在工具栏后面的行下面。

<include layout="@layout/content_myactivity" />

所以,一旦我遇到一个问题,内容在工具栏上面(仅用于工具栏,而不是在appbar中)隐藏整个工具栏,仍然可以点击。因此,我必须将代码中的工具栏移到我的内容下方,以使其显示在我的内容之上。

那么,用什么?工具栏? AppBarLayout? AppBarLayout里面的工具栏?

每个人的用途是什么?

更新

所以我已经在activity_layout文件中添加了工具栏。然后,为什么需要使用setSupportActionBar(toolbar);来设置工具栏并添加主题AppTheme.NoActionBar。这是Android Studio中所有活动的正常行为。

使用

禁用窗口操作栏有什么用?
<item name="windowActionBar">false</item>

并使用setSupportActionBar(toolbar)进行设置?

2 个答案:

答案 0 :(得分:5)

AppBarLayout是一个容器,您可以在其中放置ToolBarTabLayout或其他内容。无论您使用哪种布局用于其余内容,所有这些都将显示在屏幕顶部。如果需要,您可以使用Toolbar而不是AppBarLayout,但是您需要将其包含在使用其余内容的ViewGroup中。并将它放在它的底部,所以它不会被其他东西覆盖。

AppBar可以帮助您远离它并提供一些其他功能,例如滚动行为。它写成here btw.

另请注意,AppBarLayout在很大程度上取决于CoordinatorLayout中的直接子项。如果您在其他AppBarLayout内使用ViewGroup,则其大部分功能将无效。

答案 1 :(得分:1)

AppBarLayout是一个垂直LinearLayout,它实现了材料设计应用栏概念的许多功能,即滚动手势。

儿童应通过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_width="match_parent"
     android:layout_height="match_parent">

 <android.support.v4.widget.NestedScrollView
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         app:layout_behavior="@string/appbar_scrolling_view_behavior">

     <!-- Your scrolling content -->

 </android.support.v4.widget.NestedScrollView>

 <android.support.design.widget.AppBarLayout
         android:layout_height="wrap_content"
         android:layout_width="match_parent">

     <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