android ConstraintLayout初次使用笔记



昨天有空,试了下android之前出的新布局ConstraintLayout,初次使用,遇到了一些小坑,故在次记录一下



参考鸿洋的博客学习的:http://blog.csdn.net/lmj623565791/article/details/78011599


首先,弄一个简单的布局练练手:


这里写图片描述



这个还是蛮简单的,代码如下:


<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <Button
        android:id="@+id/a"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:text="A"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintBottom_toTopOf="@+id/d"
        app:layout_constraintRight_toLeftOf="@+id/b"
        />

    <Button
        android:id="@+id/b"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:text="B"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toTopOf="@+id/d"
        app:layout_constraintLeft_toRightOf="@id/a"
        app:layout_constraintRight_toLeftOf="@+id/c"
         />

    <Button
        android:id="@+id/c"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:text="C"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintLeft_toRightOf="@id/b"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
         />

    <Button
        android:id="@+id/d"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:text="D"
        app:layout_constraintTop_toBottomOf="@id/a"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toLeftOf="@id/c"
        />

</android.support.constraint.ConstraintLayout>



效果图:



这里写图片描述



不错,还是蛮可以的,下面进阶一下,弄一个稍微复杂点的:



这里写图片描述



感觉也不是很难,无非就是第二行布局多了个类似权重的属性,把e的属性constraintHorizontal_weight权重设为2,f的属性设为1,开始拿起键盘就是一顿乱敲…….

结果出乎意料,怎么的布局也不成功,静下心分析了一下,觉得问题可能出现在权重上,怎么说呢,当我把e、f、d的水平方向相互约束的话,a、b、c、d水平方向也是相互约束的,就造成d的宽度本来是屏幕的四分之一,跟e、f相互约束后又成了屏幕的三分之一,所以就报错了,更别说后面的权重属性了,


那么我把f的右边跟c的右边约束呢?结束还是一样,布局预览不出来,好吧,还是有问题,然后就……..突然想到了Guideline,对哦,我创建个垂直的Guideline,放到屏幕宽度的75%的位置,让f跟Guideline来约束起来,然后提起键盘就是一顿写…..


代码:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <android.support.constraint.Guideline
        android:id="@+id/line"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintGuide_percent="0.75"
        />

    <Button
        android:id="@+id/a"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:text="A"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintBottom_toTopOf="@+id/e"
        app:layout_constraintRight_toLeftOf="@+id/b"
        />

    <Button
        android:id="@+id/b"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:text="B"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toTopOf="@+id/e"
        app:layout_constraintLeft_toRightOf="@id/a"
        app:layout_constraintRight_toLeftOf="@+id/c"
         />

    <Button
        android:id="@+id/c"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:text="C"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintLeft_toRightOf="@id/b"
        app:layout_constraintBottom_toTopOf="@+id/e"
        app:layout_constraintRight_toLeftOf="@id/line"
         />

    <Button
        android:id="@+id/d"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:text="D"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toRightOf="@id/line"
        />

    <Button
        android:id="@+id/e"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:text="E"
        app:layout_constraintHorizontal_weight="2"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintTop_toBottomOf="@id/a"
        app:layout_constraintRight_toLeftOf="@+id/f"
        />

    <Button
        android:id="@+id/f"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:text="F"
        app:layout_constraintHorizontal_weight="1"
        app:layout_constraintLeft_toRightOf="@id/e"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintTop_toBottomOf="@id/a"
        app:layout_constraintRight_toLeftOf="@id/line"
        />

</android.support.constraint.ConstraintLayout>



效果:

这里写图片描述

这里写图片描述



可以了,这样就好说了,复杂的布局也可以一层嵌套就搞定了,大大的提升的对界面渲染的速度与效率,但是,并不是以后就盲目的使用新东西而抛弃旧东西,每个layout都是自身的好处与坏处,相互弥补不足,灵活运用


下面参考win7计算器的布局来用ConstraintLayout来实现一下试试:

这里写图片描述


效果:

这里写图片描述

——————————————end————————————————

猜你喜欢

转载自blog.csdn.net/fan7983377/article/details/78799311