Android5.0新增框架包design常用控件介绍

Google为了ui的美观并且与当前市场常见的产品界面相匹配,在android 5.0之后推出了ui控件包——design。在Design包当中包含了很多UI控件,常用的大概有:TabLayout,NavigationView,BottomSheetDialog等控件。

      下面我们关于design包当中的协调者布局进行讲解:

1.android.support.design.widget.CoordinatorLayout 超级FrameLayout
手势,及滚动布局,MD的手势有很多组成部分,包括touch ripples和meaningful transitions。
Design library引入了CoordinatorLayout,一个从另一层面去控制子view之间触摸事件的布局,
Design library中的很多控件都利用了它。一个很好的例子就是当你将FloatingActionButton作
为一个子View添加进 CoordinatorLayout并且将CoordinatorLayout传递给 Snackbar.make(),
在3.0及其以上的设备上,Snackbar不会显示在悬浮按钮的上面,而是FloatingActionButton 
利用CoordinatorLayout提供的回调方法,在Snackbar以动画效果进入的时候自动向上移动让出位置,
并且在Snackbar动画地消失的时候回到原来的位置,不需要额外的代码。

CoordinatorLayout的另一个用例是ActionBar与滚动技巧。你可能已经在自己的布局中使用了Toolbar
它允许你更加自由的自定义其外观与布局的其余部分融为一体。Design library把这种设计带到了更高的水平,
使用AppBarLayout可以让你的Toolbar与其他View(比如TabLayout的选项卡)能响应被标记了
ScrollingViewBehavior的View的滚动事件。
注意项:
当用户滚动RecyclerView,AppBarLayout可以这样响应滚动事件:
根据子view的滚动标志(scroll flag)来控制它们如何进入(滚入屏幕)与退出(滚出屏幕)。
Flag包括:
    scroll:所有想滚动出屏幕的View都需要设置这个flag,没有设置这个flag的View将被固定在屏幕顶部。
    enterAlways:这个flag让任意向下的滚动都会导致该View变为可见,启用快速“返回模式”。
    enterAlwaysCollapsed:当你的视图已经设置minHeight属性又使用此标志时,你的视图只能已最小高度进入,只有当滚动视图到达顶部时才扩大到完整高度。
    exitUntilCollapsed:this flag causes the view to scroll off until it is ‘collapsed’ (its minHeight) before exiting。


特别注意:所有使用scroll flag的View都必须定义在没有使用scroll flag的View前面,这样才能确保所有的View从顶部退出,留下固定的元素。
PS一句:CoordinatorLayout还提供了layout_anchor和layout_anchorGravity属性一起配合使用,可以用于放置floating view,比如FloatingActionButton与其他View的相对位置。相见Demo中演示。 

2.android.support.design.widget.AppBarLayout MD风格的滑动Layout
这个没啥解释的,就是一个ViewGroup,配合ToolBar与CollapsingToolbarLayout等使用。就是一个纯容器类。
无特殊注意项。 

3.android.support.design.widget.CollapsingToolbarLayout 可折叠MD风格ToolbarLayout 
可伸缩折叠的Toolbar (Collapsing Toolbar),直接添加Toolbar到AppBarLayout可以让你使用enterAlwaysCollapsed和 
exitUntilCollapsedscroll标志,但是无法控制不同元素如何响应collapsing的细节。这里使用了CollapsingToolbarLayout
的app:layout_collapseMode=”pin”来确保Toolbar在view折叠的时候仍然被固定在屏幕的顶部。还可以做到更好的效果,
当你让CollapsingToolbarLayout和Toolbar在一起使用的时候,
title 会在展开的时候自动变得大些,
而在折叠的时候让字
体过渡到默认值。必须注意,在这种情况下你必须在CollapsingToolbarLayout上调用 setTitle(),而不是在Toolbar上。
除了固定住View,
你还可以使用 app:layout_collapseMode=”parallax”
(以及使用 app:layout_collapseParallaxMultiplier=”0.7”来设置视差因子)来实现视差滚动效果
(比如 CollapsingToolbarLayout里面的一个ImageView),这中情况和CollapsingToolbarLayout的 
app:contentScrim=”?attr/colorPrimary”属性一起配合更完美。
有一件事情必须注意,那就是CoordinatorLayout并不知道FloatingActionButton或者AppBarLayout的内部工作原理,
它只是以Coordinator.Behavior的形式提供了额外的API,该API可以使子View更好的控制触摸事件与手势以及声明
它们之间的依赖,并通过onDependentViewChanged()接收回调。
可以使用CoordinatorLayout.DefaultBehavior(你的View.Behavior.class)注解或者在布局中使用
app:layout_behavior=”com.example.app.你的View$Behavior”属性来定义view的默认行为。 
framework让任意View和CoordinatorLayout结合在一起成为了可能。 

4.nestedscrollview:
在新版的support-v4兼容包里面有一个NestedScrollView控件,这个控件其实和普通的ScrollView并没有多大的区别,
这个控件其实是MD(Meterial Design)中设计的一个控件,目的是跟MD中的其他控件兼容。应该说在MD中,
RecyclerView代替了ListView,而NestedScrollView代替了ScrollView,他们两个都可以用来跟ToolBar交互,
实现上拉下滑中ToolBar的变化。


我们通过具体的例子,将以上四个控件嵌套起来,查看一下,最终的效果,我们主要在布局当中进行体现:

<?xml version="1.0" encoding="utf-8"?>
<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/coorlayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <android.support.design.widget.AppBarLayout
        android:id="@+id/appbar"
        android:layout_width="match_parent"
        android:layout_height="280dp">
        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/collapslayout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:collapsedTitleGravity="left|top"
            app:expandedTitleGravity="right|bottom"
            app:expandedTitleMargin="10dp"
            app:contentScrim="@color/colorAccent"
            app:layout_scrollFlags="exitUntilCollapsed|scroll">
            <ImageView
                android:layout_width="match_parent"
                android:layout_height="220dp"
                android:background="#00ffff"
                app:layout_collapseMode="parallax"
                android:scaleType="centerCrop"/>
            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="60dp"
                app:layout_collapseMode="pin"
                app:title="我是Toolbar">

            </android.support.v7.widget.Toolbar>
        </android.support.design.widget.CollapsingToolbarLayout>
    </android.support.design.widget.AppBarLayout>

    <android.support.v4.widget.NestedScrollView
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <LinearLayout
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            <ImageView
                android:layout_width="match_parent"
                android:layout_height="180dp"
                android:src="@mipmap/ali"
                android:scaleType="centerCrop"/>
            <ImageView
                android:layout_width="match_parent"
                android:layout_height="180dp"
                android:src="@mipmap/ali"
                android:scaleType="centerCrop"/>
            <ImageView
                android:layout_width="match_parent"
                android:layout_height="180dp"
                android:src="@mipmap/ali"
                android:scaleType="centerCrop"/>
            <ImageView
                android:layout_width="match_parent"
                android:layout_height="180dp"
                android:src="@mipmap/ali"
                android:scaleType="centerCrop"/>
            <ImageView
                android:layout_width="match_parent"
                android:layout_height="180dp"
                android:src="@mipmap/ali"
                android:scaleType="centerCrop"/>
            <ImageView
                android:layout_width="match_parent"
                android:layout_height="180dp"
                android:src="@mipmap/ali"
                android:scaleType="centerCrop"/>
            <ImageView
                android:layout_width="match_parent"
                android:layout_height="180dp"
                android:src="@mipmap/ali"
                android:scaleType="centerCrop"/>
            <ImageView
                android:layout_width="match_parent"
                android:layout_height="180dp"
                android:src="@mipmap/ali"
                android:scaleType="centerCrop"/>
        </LinearLayout>
    </android.support.v4.widget.NestedScrollView>
</android.support.design.widget.CoordinatorLayout>


然后将这个布局绑定给activity,运行之后,就可以看到效果了,效果如下:





猜你喜欢

转载自blog.csdn.net/u012156341/article/details/79637467
今日推荐