6

我已阅读了有关AppCompat库及其所有功能的工具栏。有些我已经在Android开发者博客(here)注意到的一件事情是:ActionBar vs工具栏或ActionBar和工具栏

工具栏在程序兼容性完全支持并具有功能并与框架部件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内的工具栏?

每一个的用途是什么?

UPDATE

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

什么用禁用与

<item name="windowActionBar">false</item> 

窗口操作栏,并设置setSupportActionBar(toolbar)呢?

+3

这是一个我所见过的最好的问题。来自10多年的专业开发,并与许多编程语言和框架合作,我不得不说,Android的架构和设计真的是一个痛苦的屁股。很多时候,我问自己不可能事情变得更容易,或更清洁?我爱你的问题,因为要问“为什么”是知识的一个非常重要的方面,所以SO不会发生那么多。 –

+0

@SaeedNeamati谢谢:) – kirtan403

+0

@SaeedNeamati我很赞同你! android开发真的很糟糕。 – kokabi

回答

4

AppBarLayout是一个容器,您可以在其中放置ToolBarTabLayout,也可能是别的东西。所有内容都将显示在屏幕的顶部,而不管您为其余内容使用何种布局。如果需要,您可以使用Toolbar而不使用AppBarLayout,但是您需要将其包含在您使用其余内容的ViewGroup中。并将其放在底部,这样它就不会与其他东西叠加。

AppBar从中可以节省您的时间并提供一些其他功能,例如滚动行为。它被写入here btw.

还请注意,AppBarLayout严重依赖作为CoordinatorLayout内的直接子使用。如果在不同的ViewGroup中使用AppBarLayout,则其大部分功能都不起作用。

+0

谢谢,所以AppBarLayout可以包括像Relativelayout,ImageView,TextView等所有正常的小部件? – kirtan403

+0

考虑它是一个垂直LinearLayout。所以是的。 – RexSplode

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

+0

这是来自android开发人员网站的确切副本 – kirtan403

+0

是的。我的答案已经提供了参考。我将代码和说明放在我的答案中,这有助于主链接内容将被更改或删除。 – pRaNaY