CoordinatorLayout,千呼万唤始出来。

亲可记得我之前转载的INTRODUCTION TO COORDINATOR LAYOUT ON ANDROID,今天将它翻译一遍,以飨读者。

在这一年的I/O开发者大会上,Google引入了一个新的Android设计支持库来帮助开发者们在他们的APP中使用material design,这里面包含了一些为API7及以上设计的很重要的material design building blocks。如果你不小心错过了他,可以点击这里http://android-developers.blogspot.com/2015/05/android-design-support-library.html.

遇见 COORDINATORLAYOUT(ANDROID)

相比较其他layout而言新的超有力的FrameLayout(CoordinatorLayout)十分有趣。从他的名字中你也可以猜出来这个超级layout有能力协调所有独立的子views。

你要做的只是将所有view写在CoordinatorLayout中,是时候写一波代码了,这个Demo十分简单,它包含一个用于触发Snackbar的Floating Action Button。

首先,在gradle中添加支持库:

compile 'com.android.support:design:22.2.0'

现在为我们的Activity写一个简单的布局文件:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><android.support.design.widget.FloatingActionButtonandroid:id="@+id/fab"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="end|bottom"android:layout_margin="16dp"android:src="@drawable/ic_done" /></android.support.design.widget.CoordinatorLayout>

然后是MainActivity:

public class MainActivity extends AppCompatActivity {@Override  protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);findViewById(R.id.fab).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Snackbar.make(view, "Hello Snackbar", Snackbar.LENGTH_LONG).show();}});}
}

完成后:

很酷~

但是,如果你想实现不同效果的Floating Action Button怎么办?
支持库里的Floating Action Button实现没有菜单选项(原文menu options),
所以我们可以试试Base的开发者开发的开源Floating Action Button库:
compile 'com.getbase:floatingactionbutton:1.9.1'
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayoutxmlns: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"><com.getbase.floatingactionbutton.FloatingActionButtonandroid:id="@+id/fab"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="end|bottom"android:layout_margin="16dp"app:fab_icon="@drawable/ic_done" /></android.support.design.widget.CoordinatorLayout>

CoordinatorLayout这次没有生效,这是因为我们的View没有默认的CoordinatorLayout.Behavior实现。

解决方案?我们也等着别人来解决它···

或者,我们可以为自己项目中的View写定制化的Behavior实现。

VIEWS 学会如何 BEHAVE

这才是这套框架真正的力量,你没有必要访问这个View的类来设置你的behavior,你还可以改变任何View的默认behavior。

首先我们需要实现Behavior类:
public class FloatingActionButtonBehavior extends CoordinatorLayout.Behavior<FloatingActionButton>

为了使这个类能解析XML我们需要为其添加带有Context和AttributeSet参数的构造方法。

public FloatingActionButtonBehavior(Context context, AttributeSet attrs) {}

下一步是重写layoutDependsOn(),如果我们想监听它的变化就应该返回true。

在这个例子中我们想监听Snackbar对象的变化。
现在让我们实现具体的行为。
每当CoordinatorLayout里面的View变化时onDependentViewChanged方法就会被调用。在这个方法里面我们能读到Snackbar的状态,当Snackbar出现时我们让Floating Action Button上移,为了做到这一点我们需要将Floating Action Button的Y坐标上升(上升高度为Snackbar的高度),Snackbar上升高度为其本身的高度,即在Y轴上的偏移量减去其自身高度。(参考View坐标系,Y轴垂直向下为正),根据文档,当对象改变其在屏幕上的位置时,我们应该返回true。

PS:

//此方法用于获取View在水平方向的偏移量,以像素为单位
public float android.view.View.getTranslationX()
//此方法用于获取View在垂直方向的偏移量,以像素为单位
public float android.view.View.getTranslationY()
//此方法用于设置View在水平方向的偏移量,以像素为单位。会引发View重绘
//偏移量为正数时,表示View从左向右平移。反之则从右向左平移
public void android.view.View.setTranslationX(float translationX)
//此方法用于设置View在水平方向的偏移量,以像素为单位。会引发View重绘
//偏移量为正数时,表示View从上向下平移。反之则从下向上平移
public void android.view.View.setTranslationY(float translationY)

@Override
public boolean onDependentViewChanged(CoordinatorLayout parent, FloatingActionButton child, View dependency) {float translationY = Math.min(0, dependency.getTranslationY() - dependency.getHeight());child.setTranslationY(translationY);return true;
}

最后一步是在Coo rdinatorLayout引入Floating Action Button,我们在xml中做如下修改:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayoutxmlns: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"><com.getbase.floatingactionbutton.FloatingActionButtonandroid:id="@+id/fab"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="end|bottom"android:layout_margin="16dp"app:layout_behavior="com.getbase.coordinatorlayoutdemo.FloatingActionButtonBehavior"app:fab_icon="@drawable/ic_done" /></android.support.design.widget.CoordinatorLayout>

ok,大功告成。

如果你想为自己的View定义默认的behavior,只需要在你的Behavior中加上DefaultBehavior声明。

源代码(github) :

https://github.com/ggajews/coordinatorlayoutwithfabdemo

Happy coding!

https://lab.getbase.com/introduction-to-coordinator-layout-on-android/

翻译不易,转载请注明出处哈。

权兴权意

代码可以更优雅~

http://blog.csdn.net/hxqneuq2012/article/details/56481639

千呼万唤始出来的CoordinatorLayout相关推荐

  1. CoordinatorLayout 和 AppBarLayout 实现的局部点击按钮实现滑动某一个固定的距离

    实现的效果如下: 如果需要的只是折叠效果 可以看这遍文章点击跳转!!!!!!!!!!!!!!!!!!!! 具体代码如下 findViewById(R.id.tv).setOnClickListener ...

  2. Androidx CoordinatorLayout 和 AppBarLayout 实现折叠效果(通俗的说是粘性头效果)

    Androidx  CoordinatorLayout 和 AppBarLayout 实现折叠效果 或者 说是粘性头效果 先看下面是不是你需要的结果  大致顺序是先滚动整体,然后折叠 在滚动list ...

  3. CoordinatorLayout 的jar包位置

    今天找CoordinatorLayout的jar包,网上百度了很久也没有谁提供下载呢 郁闷很久,最后有个群里面的有位朋友给指了下位置. 就是在自己的sdk里面 下面就以我的为参考: D:\sdk\ad ...

  4. NestedScrolling CoordinatorLayout

    Android NestedScrolling机制完全解析 带你玩转嵌套滑动 一步一步深入理解CoordinatorLayout 源码看CoordinatorLayout.Behavior原理 转载于 ...

  5. Android5.0之CoordinatorLayout的使用

    CoordinatorLayout,中文译作协调者布局,光听这名字你可能很难判断出协调者布局有什么特点,那么我们来看看下面一张图片: 由于CSDN对图片大小的要求,我只能录制一个快速播放的动画,请大家 ...

  6. android底部滑出view,Android CoordinatorLayout与NestedScrollView基于Behavior几行代码实现底部View滑入滑出...

    Android CoordinatorLayout与NestedScrollView基于Behavior几行代码实现底部View滑入滑出 在CoordinatorLayout的Behavior出现之前 ...

  7. CoordinatorLayout 之深入理解

    上篇在对 CoordinatorLayout 作了一些简单介绍,以了解 CoordinatorLayout 带来的一些特性和常见用途.本篇将对 CoordinatorLayout 的源码进行一些分析, ...

  8. CoordinatorLayout、AppBarLayout、Toolbar使用详解

    又到周末了,小编在这里祝大家周末愉快哦,android开发的童鞋们我们交流学习机会又来啦,今天跟大家交流一下我们常用的标题栏Toolbar的使用,并且配合一些Material Design风格的其他控 ...

  9. Android CoordinatorLayout使用

    使用CoordinatorLayout.AppBarLayout.CollapsingToolbarLayout.FloatingActionButton制作连动布局. Android Studio添 ...

  10. Android开发之CoordinatorLayout使用详解一

    2019独角兽企业重金招聘Python工程师标准>>> 主页:http://cherylgood.cn/20170302/51 官网描述为:CoordinatorLayout是一个增 ...

最新文章

  1. 利用Libra进行机器学习和深度学习
  2. bezier曲线_Bezier算法
  3. GdiPlus[12]: IGPLinearGradientBrush 的其他构建方式
  4. 在vc2005中使用MoveWindow()调整控件大小,不能及时刷新,在vc6中则可以
  5. 北京大学Cousera学习笔记--3-计算导论与C语言基础-第一讲.计算机的基本原理-计算机怎么计算-数的二进制...
  6. html云雾效果,PS中怎么做像这样的云雾效果?(有图)?
  7. 使用ADF列表视图的主从数据
  8. sockjs.js:1609 GET http://192.168.1.119:8080/sockjs-node/info?t=1617976777339 net::ERR_CONNECTION_TI
  9. android 控件覆盖关系,安卓子控件抢占父控件点击事件或者焦点问题
  10. 得具备点靠钱赚钱的能力
  11. 火车票软件哪个好用_买火车票的软件哪个最好
  12. (7)全民小视频引流脚本模块化开发01-关注用户By飞云脚本学院
  13. 什么是zone?如何做zone?如何做好zone?
  14. Wireshark文档阅读笔记-TCP Flags
  15. 计算机网络:随机访问介质访问控制之CSMA协议
  16. 在Qt中使用OpenGL(三)
  17. android 清除通知栏,android startForeground去除通知栏
  18. 不用linux转录组数据分析,玩转RNA-seq数据也可以不需要linux ?
  19. python使用h5py写h5文件,写入tuple元组类型
  20. android x86 最低内存,安卓模拟器低配置版哪个好 电脑内存再小也不怕卡

热门文章

  1. @RequestParam使用
  2. PNAS | 朱永官院士团队单细胞拉曼结合靶向宏基因组揭示土壤活性抗生素耐药组...
  3. OA系统项目实施的难点和解决办法
  4. c语言贪吃蛇代码(菜单功能后续补充)
  5. 树莓派之火焰传感器模块
  6. 一图秒懂“天使投资、VC、PE” 与“A轮、B轮、C轮融资”的关系
  7. 自我管理--做事要有明确的时间观念
  8. CentOS7.4安装ClamAV反病毒软件
  9. WiFi通信模块框图
  10. paip 输入法编程----二级汉字2350个常用汉字2350个