CoordinatorLayout使用总结
来源:互联网 发布:js 计数器 滚动效果 编辑:程序博客网 时间:2024/06/06 10:53
coordinatorlayout很强大,但是现在都是千篇一律的是配合appbarlayout等使用,确实很完美,但是也许正是太完美了,结果就是同质化严重,可扩展性差,所以我们应该学习用的同时学习他的思想比较好,比如说coordiantorlayout对于view的解耦做的非常好,所以我重点研究了behaviour,觉得很强大,直接把整理过程记录下来:
/** * coordiantorlayout使用总结: * 1.必须作为根部局使用,也就是说在fragment中无法使用,他其实就是一个加强版的framelayout * 2.app:layout_scrollFlags="scroll|enterAlways"属性,是appbarlayout内部的属性,是谁需要滚动消失,谁就指定,但是不能在布局的最外层指定,否则无效 * * 自定义behavior使用规则以及问题: * 1.behaviour规定了追随者的追随规则,因此谁是追随者,谁就设置behaviour * 2.自定义behaviour在AS上一直显示没有任何地方应用,其实已经起作用了 * 3.coordinatorLayout其实只对垂直的两个字view进行动作协调 * 4.coordinatorLayout如果垂直子view大于2个,那么可以设置多个behavior,但是不会起作用,因此再次印证了只能协调垂直的两个子view * 5.设置behaviour的方法有两个,第一个是采用注解的方式设置{@link AppBarLayout},自己内部去定义behavior{@link AppBarLayout.Behavior}, * 第二种方式就是我们自定义,然后通过xml文件进行设置 * 6.接第四条说,如果垂直子view大于2个,例如三个四个,并且类型都一样例如都是imageview,behaviour的泛型也是imageview或者view会怎么样?试验结果是,所有的imageview都是事件源 * 这有什么好处呢?好处就是我们可以设定一定的规则让追随者可以改变追随的人;如果三个view的类型都不同,例如有imageview,textview等,behaviour中的泛型为其中一种,会出现什么 * 效果呢?根据其他博客说,coordinatorLayout会遍历所有的子view然后找到互相依赖的view进行关联,但是测试结果却是,和两个关联者是否挨着有很大关系,可自行测试。 * 7.app:layout_behavior使用的view在自定义behavior中,在xml文件中设置的view为追随者,也就是被动的view,但是在coordinatorLayout和appbarlayout配合使用中,却相反为主动view,不解? * 8.如果仅仅是有两个view,并且运动规则一致,则完全可以使用app:layout_aucher来使用,很简单 * * 参考学习博客: * 1. http://www.jianshu.com/p/26439595ffef * 2. http://www.jianshu.com/p/a506ee4afecb * 3. http://www.jianshu.com/p/72d45d1f7d55 * 4. http://blog.csdn.net/xyz_lmn/article/details/48055919 */public class MyBehaviour extends CoordinatorLayout.Behavior<ImageView> { public MyBehaviour() { super(); } public MyBehaviour(Context context, AttributeSet attrs) { super(context, attrs); } /** * 这个方法一直都会调用,用来判断事件源是否为依赖的view,猜想:我们可以设置某些限制条件来更换事件源 * * @param parent * @param child * @param dependency * @return */ @Override public boolean layoutDependsOn(CoordinatorLayout parent, ImageView child, View dependency) { return dependency instanceof TextView; } /** * 三个参数含义说明CoordinatorLayout只能协调垂直的两个子view,这个方法只有当事件源view的尺寸大小或者位置发生改变时调用(其他为测试) * * @param parent CoordinatorLayout * @param child 设置behaviour的view,即为被动执行者 * @param dependency 他为主动者,是另一个view的依赖者,即为事件源 * @return */ @Override public boolean onDependentViewChanged(CoordinatorLayout parent, ImageView child, View dependency) { return true; } /** * 如果事件源为可滑动的并且实现了NestedScrollingChild接口的view调用才有效果,具体有如下view: * HorizontalGridView * NestedScrollView * RecyclerView * SwipeRefreshLayout * VerticalGridView * 所以这就是为什么listview不可以的原因了,当然我们也可以自定义listview自己加上,具体参数含义可以使用的时候打印一下 * * @param coordinatorLayout * @param child * @param target * @param dxConsumed * @param dyConsumed * @param dxUnconsumed * @param dyUnconsumed */ @Override public void onNestedScroll(CoordinatorLayout coordinatorLayout, ImageView child, View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed) { super.onNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed); }}布局很简单:
<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/activity_text" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/testImg" android:layout_width="100dp" android:layout_height="100dp" android:layout_gravity="bottom" android:scaleType="fitXY" android:src="@drawable/pic3" app:layout_behavior="com.hawk.android.camera.coordinatorlayoutdemo2.MyBehaviour" /> <TextView android:id="@+id/child1" android:layout_width="100dp" android:layout_height="100dp" android:layout_gravity="center" android:background="@color/colorPrimaryDark" /></android.support.design.widget.CoordinatorLayout>里面有两个不解的地方,欢迎解释,谢谢
0 0
- CoordinatorLayout使用总结
- CoordinatorLayout与Behavior 的使用总结
- 使用CoordinatorLayout
- CoordinatorLayout使用
- CoordinatorLayout使用
- CoordinatorLayout使用
- CoordinatorLayout使用
- 使用CoordinatorLayout
- 使用CoordinatorLayout
- coordinatorlayout使用
- 使用CoordinatorLayout
- 使用CoordinatorLayout
- android CoordinatorLayout使用总结(*****)
- CoordinatorLayout与Behavior总结
- 有关CoordinatorLayout的总结
- android CoordinatorLayout使用
- CoordinatorLayout、SwipeRefreshLayout的使用
- Android:CoordinatorLayout使用详解
- 【已解决】tomcat启动不成功(点击startup.bat闪退)的解决办法
- java编程思想-第五章-初始化与清理
- java编程思想第4版第15章通配符笔记及练习
- AndroidStudioTip--用Builder模式替代构造方法
- PinTool使用小结
- CoordinatorLayout使用总结
- xUtils中DbUtils的使用
- TortoiseGit提交代码到GitHub
- C# RSA加密、解密、加签、验签、支持JAVA格式公钥私钥、PEM格式公钥私钥、.NET格式公钥私钥 -变态模式【支持私钥加密,公钥解密】(二)
- PAT 1109 Group Photo
- Python学习笔记(三)——Python数据结构之序列
- 【总结】JDK、java环境配置
- greedao 详细说明
- DP HDU-1069