Android基础布局之ConstraintLayout

Android基础之布局ConstraintLayout

Google I/O 2016 上发布了 ConstraintLayout,据说很强大,那就一探究竟吧!

gradle配置

      compile 'com.android.support.constraint:constraint-layout:1.0.0-beta2'  

阅读前提:熟悉四大基础布局

一、位置控制

  • 8个边界控制属性
    注:最左边表示可移动的最左边,左边表示View的左边边界
    app:layout_constraintLeft_toLeftOf 
    app:layout_constraintLeft_toRightOf 我最左边的位置 在别人的右边 下面的意思类似
    app:layout_constraintRight_toRightOf 
    app:layout_constraintRight_toLeftOf
    app:layout_constraintTop_toTopOf 
    app:layout_constraintTop_toBottomOf
    app:layout_constraintBottom_toBottomOf
    app:layout_constraintBottom_toTopOf

不明白没关系,看例子。

* 例如:

这里写图片描述

    <!--如图,左边一个A,右边一个C,我如果想新建一个B在A C之间,如下-->
     <Button
        app:layout_constraintLeft_toRightOf="@+id/bt_a"
        app:layout_constraintRight_toLeftOf="@+id/bt_c"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="B"/>
    <!--字面理解:1.我最左边的位置,在button A的右边-->
    <!--字面理解:1.我最右边的位置,在button C的左边-->

如上图中,最左边和最右边的位置已经确定,B出现在A和C中间,但是如果我不想在中间怎么办(比如说我想靠右一点)

  • 这里引入2个偏移属性
    layout_constraintHorizontal_bias(水平方向偏移)(范围0-1)
    layout_constraintVertical_bias(垂直方向偏移)(范围0-1)  

怎么理解?我只发图不说话,看图
如图:B的水平偏移为0
这里写图片描述

    app:layout_constraintHorizontal_bias="0"

如图:B的水平偏移为0.5
这里写图片描述

    app:layout_constraintHorizontal_bias="0.5"

如图:B的水平偏移为0.7
这里写图片描述

    app:layout_constraintHorizontal_bias="0.7"

如图:B的水平偏移为1
这里写图片描述

    app:layout_constraintHorizontal_bias="1"    

总结:(明白了吗?不明白请继续看图)
1.通过8个边界约束属性可以固定View的最左边、最右边、最上面、最下面的位置
2.通过设置偏移属性,可以控制View在边界范围移动,最左边是0,最右边是1,中间是0.5
3.当设置了边界约束属性后,View会自动出现在中间,也就是说,默认的偏移属性是0.5

二、大小控制

  • 先介绍两个布局大小控制属性
    layout_constraintHorizontal_weight //水平方向上比重,类似线性布局
    layout_constraintVertical_weight  //垂直方向上比重,类似线性布局

下面我将用ConstraintLayout来模仿一个水平方向的线性布局的例子

完整布局文件:

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:ignore="MissingConstraints">
        <!--A边界控制属性 有 左 和 右-->
        <Button
            android:id="@+id/bt_a"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:text="A"
            app:layout_constraintHorizontal_weight="1"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toLeftOf="@id/bt_b"/>
        <!--B边界控制属性 也有 左 和 右-->
        <Button
            android:id="@+id/bt_b"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:text="B"
            app:layout_constraintHorizontal_weight="1"
            app:layout_constraintLeft_toRightOf="@id/bt_a"
            app:layout_constraintRight_toLeftOf="@id/bt_c"/>
        <!--C边界控制属性 只有右-->
        <Button
            android:id="@+id/bt_c"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:text="C"
            app:layout_constraintHorizontal_weight="1"
            app:layout_constraintRight_toRightOf="parent"/>
    </android.support.constraint.ConstraintLayout>

效果如下(效果图中C明显比较小,说明C 比重设置没有效果)
这里写图片描述

结论:
1.实现水平方向线性布局,所有的View都必须设置左右边界控制属性,而且相互控制
2.实现比重大小控制,必须设置layout_width=”0dp”

如图布局(能看懂基本上说明你已经掌握了比重控制)

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:ignore="MissingConstraints">
        <TextView
            android:background="#0f0"
            android:id="@+id/bt_a"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:text="A"
            app:layout_constraintBottom_toTopOf="@id/bt_b"
            app:layout_constraintHorizontal_weight="1"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toLeftOf="@id/bt_b"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintVertical_weight="1"/>
        <TextView
            android:background="#0f0"
            android:id="@+id/bt_b"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:text="B"
            app:layout_constraintBottom_toTopOf="@id/bt_c"
            app:layout_constraintHorizontal_weight="1"
            app:layout_constraintLeft_toRightOf="@id/bt_a"
            app:layout_constraintRight_toLeftOf="@id/bt_c"
            app:layout_constraintTop_toBottomOf="@id/bt_a"
            app:layout_constraintVertical_weight="1"/>
        <TextView
            android:background="#0f0"
            android:id="@+id/bt_c"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:text="C"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintHorizontal_weight="1"
            app:layout_constraintLeft_toRightOf="@id/bt_b"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toBottomOf="@id/bt_b"
            app:layout_constraintVertical_weight="1"/>
    </android.support.constraint.ConstraintLayout>

效果图如下:
这里写图片描述

三、位置控制补充

绝对坐标:父布局左上角默认为(0,0),这个坐标是是相对于父布局左上角的坐标

    layout_editor_absoluteX 绝对坐标x
    layout_editor_absoluteY 绝对坐标y

当设置了左边界控制属性,x绝对坐标失效,请使用基础布局的(layout_marginLeft替代)
当设置了上边界控制属性,y绝对坐标失效,请使用基础布局的(layout_marginTop替代)

因此,,绝对坐标。。不好适配,也不好控制。差评。

另外附上一张
Android Studio 超智能的控制设置图,如下

这里写图片描述

展开阅读全文

Git 实用技巧

11-24
这几年越来越多的开发团队使用了Git,掌握Git的使用已经越来越重要,已经是一个开发者必备的一项技能;但很多人在刚开始学习Git的时候会遇到很多疑问,比如之前使用过SVN的开发者想不通Git提交代码为什么需要先commit然后再去push,而不是一条命令一次性搞定; 更多的开发者对Git已经入门,不过在遇到一些代码冲突、需要恢复Git代码时候就不知所措,这个时候哪些对 Git掌握得比较好的少数人,就像团队中的神一样,在队友遇到 Git 相关的问题的时候用各种流利的操作来帮助队友于水火。 我去年刚加入新团队,发现一些同事对Git的常规操作没太大问题,但对Git的理解还是比较生疏,比如说分支和分支之间的关联关系、合并代码时候的冲突解决、提交代码前未拉取新代码导致冲突问题的处理等,我在协助处理这些问题的时候也记录各种问题的解决办法,希望整理后通过教程帮助到更多对Git操作进阶的开发者。 本期教程学习方法分为“掌握基础——稳步进阶——熟悉协作”三个层次。从掌握基础的 Git的推送和拉取开始,以案例进行演示,分析每一个步骤的操作方式和原理,从理解Git 工具的操作到学会代码存储结构、演示不同场景下Git遇到问题的不同处理方案。循序渐进让同学们掌握Git工具在团队协作中的整体协作流程。 在教程中会通过大量案例进行分析,案例会模拟在工作中遇到的问题,从最基础的代码提交和拉取、代码冲突解决、代码仓库的数据维护、Git服务端搭建等。为了让同学们容易理解,对Git简单易懂,文章中详细记录了详细的操作步骤,提供大量演示截图和解析。在教程的最后部分,会从提升团队整体效率的角度对Git工具进行讲解,包括规范操作、Gitlab的搭建、钩子事件的应用等。 为了让同学们可以利用碎片化时间来灵活学习,在教程文章中大程度降低了上下文的依赖,让大家可以在工作之余进行学习与实战,并同时掌握里面涉及的Git不常见操作的相关知识,理解Git工具在工作遇到的问题解决思路和方法,相信一定会对大家的前端技能进阶大有帮助。
©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值