美文网首页
CoordinatorLayout踩坑

CoordinatorLayout踩坑

作者: mercuryli | 来源:发表于2018-05-23 10:59 被阅读0次

1.CoordinatorLayout 协调者布局 

先瞅瞅官网上怎么说的

CoordinatorLayout

CoordinatorLayout是一个super-powered FrameLayout 。注意:使用的时候可能会出现视图重叠的情况

主要两个使用场景 : 1.作为最顶层的layout  2.作为一个容器与一个或者多个子view交互(特定的)

通过给CoordinatorLayout的子View定义behavior可以做出很多特别的效果。可以在xml中设置layout_beheavior="";  这个只能是CoordinatorLayout的直接子view才能响应。有一个可以直接拿来用的behavior,app:layout_behavior="@string/appbar_scrolling_view_behavior"。这个比较有用可以将该内容放在AppBarLayout的下方,而且支持滚动。

它的子view 可能会有一个锚点(anchor),这个锚点的id 必须和某个coordinatorlayout的子view 的一致,这个可以被用来定位一个浮动的view到另一块内容上。

一般实现绚丽效果会将CoordinatorLayout+AppBarLayout+CollapsingToolbarLayout结合起来使用。

所以现在看看AppBarLayout

2.AppBarLayout

AppBarLayout

AppBarLayout是一个垂直的LinearLayout,严重依赖于CoordinatorLayout,如果使用其他的父布局,会导致其很多特性失效。AppBarLayout的直接的子view可以设置layout_scrollFlags 

3.CollapsingToolbarLayout

CollapsingToolbarLayout

CollapsingToolbarLayout 是FrameLayout的子类,是个实现了折叠的应用栏的Toolbar的包装类,它是作为AppbarLayout的直接子类使用的,自带跟随特点。由于继承于FrameLayout,要注意视图会覆盖的情况,要放在AppbarLayout里面使用。其直接子布局可以设定app:layout_collapseMode来设置其折叠mode。

4.behavior

系统自带的behavior有两种,xml中分别是app:layout_behavior="@string/appbar_scrolling_view_behavior"和app:layout_behavior="@string/bottom_sheet_behavior"

也就是AppBarLayout.Behavior和BottomSheetBehavior前者是专门与appbarlayout一起使用实现联动的效果。

5.自定义behavior

布局里面确定child (观察者)和 dependency(被观察者) child 将根据dependency的行动做出相应的行动

首先要在CoordinatorLayout 里写上child 和 dependency,child必须得写上layout_behavior

public class TextBehaviorextends CoordinatorLayout.Behavior<ImageView>{//观察者

    public TextBehavior(Context context, AttributeSet attrs) {

            super(context, attrs);

    }

   private  int mStart;

    @Override

    public boolean onDependentViewChanged(CoordinatorLayout parent, ImageView child, View dependency) {

                if(mStart==0){

                            mStart= (int) dependency.getY();

                    }

                float precent=dependency.getY()/mStart;

                 child.setY(child.getHeight()*(1-precent)-child.getHeight());

                    return true;//一般在这个方法里写child 和dependency的关系

    }

    @Override

    public boolean layoutDependsOn(CoordinatorLayout parent, ImageView child, View dependency) {

                return dependencyinstanceof TextView;//被观察者

    }

}

一个写的特别好的总结

相关文章

网友评论

      本文标题:CoordinatorLayout踩坑

      本文链接:https://www.haomeiwen.com/subject/vbzlqftx.html