浅析Android Material Design Support Library(二)——AppBarLayout

Android 2016-03-20

AppBarLayout简介

[参考文档地址][1]

AppBarLayout是一个垂直的LinearLayout,并且可以支持滚动手势。 他的子元素需要提供他们他们想要的滚动行为通过setScrollFlags(int)这个方法进行设置或者通过相关联的xml布局文件设置相关属性:app:layout_scrollFlags. 这个视图很多程度上决定了他是CoordinatorLayout的子元素。如果你用AppBarLayout中含有一个不同的ViewGroup,那么他大多数的功能键不能工作。 AppBarLayout也需要一个单独的滚动的sibling才知道什么时候去滚动。绑定的动作是通过AppBarLayout.ScrollingViewBehavior 行为类,这一意味着你需不要设置你滚动视图的行为去取代AppBarLayout.ScrollingViewBehavior。一个字符串资源包含完整的类名。

基本布局代码

<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/coordinator_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

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

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolBar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="#30469b"
            app:layout_scrollFlags="scroll|enterAlways" />

        <android.support.design.widget.TabLayout
            android:id="@+id/tabLayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="#30469b"
            app:tabGravity="fill"
            app:tabMode="fixed"
            app:tabSelectedTextColor="#ff0000"
            app:tabTextColor="#ffffff" />
    </android.support.design.widget.AppBarLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:scrollbars="none"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">
        <android.support.v4.view.ViewPager
            android:id="@+id/viewpager"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </LinearLayout>

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

这里的TabLayout和ViewPagert是官方给我们提供的简化的制作tabView的方式。之前我们如果想实现可滚动的tabView,使tabContent与tab标签产生联动就得常用ViewPagert、Fragment、还有自定义组件的方式去实现(可参考作者之前发布的文章有具体提到)。好了,使用这样的布局之后产生的效果就是,当你的内容比较多的,已经超过了屏幕的高度,那么在你滚动屏幕的时候,AppBarLayout中的Toolbar会被隐藏,当内容没有超过屏幕高度,这不会产生这种效果。

公共方法

  • public void addOnOffsetChangedListener (AppBarLayout.OnOffsetChangedListener listener)

mAppBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() { @Override public void onOffsetChanged(AppBarLayout appBarLayout, int i) { Log.v("AppBarLayout", i + ""); } });

添加一个监听器来监听AppBarLayout的offset变化。在Log中我们可以发现,i的值是负数到0.
- public AppBarLayout.LayoutParams generateLayoutParams (AttributeSet attrs)

mAppBarLayout.generateLayoutParams(new AttributeSet(){...});


返回一个新的布局参数基于提供的属性设置。
- public float getTargetElevation ()
返回正面图的值:当AppBarLayout需要提高带内容之上时。
- public final int getTotalScrollRange ()
返回计算所有layout_scrollFlags标有scroll 的View 的高度减去所有同时标有scroll 和 exitUntilCollapsed 的 View 的最小高度。
- public void removeOnOffsetChangedListener (AppBarLayout.OnOffsetChangedListener listener)
删除之前设置的addOnOffsetChangedListener
- public void setExpanded (boolean expanded)

  [1]: https://developer.android.com/reference/android/support/design/widget/AppBarLayout.html

本文由 zhanghuayan 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

赏个馒头吧