Android ConstraintLayout 约束布局

Android ConstraintLayout (约束布局) 是 Android Studio 2.3+ 创建 activity_main.xml 的默认布局方式

在上一章节中我们学习了 Android ConstraintLayout 中的 居中定位和偏向(centering positioning and bias) 约束布局,本章我们就来学习 对可见性的处理 ( Visibility behavior )

对可见性的处理 ( Visibility behavior )

对可见性的处理 ( Visibility behavior ) 是对 goneMargin 的补充

它只有一个规则就是: Gone 隐藏掉的控件,会被解析成一个点,并忽略 margin

ConstraintLayout 会对设置为 View.Gone 的 View 做特殊处理

通常,GONE的控件不会被显示,并且不是布局本身的一部分 ( 即如果标记为 GONE,则其实际尺寸并不会更改)

但就布局计算而言,GONE小部件仍然是其中的一部分,具有重要的区别:

  1. 对于布局传递,它们的维度将被视为零 ( 基本上它们将被解析为一个点 )
  2. 如果它们对其它小部件有约束力,那么它们仍然会受到尊重,但任何 margin 都将等于 0

注意: A 的 margin 也被忽略了

这种特定行为下的布局,不管我们在哪里临时将小部件标记为 GONE, 都不会破坏原有的布局, 这点,在制作动画方面非常有用

范例

我们用一个 demo 来演示下这种特殊的行为

  1. 创建一个 空的 Android 项目 cn.twle.android.ConstraintLayout

  2. 修改 activity_main.xml 为以下内容

    <?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"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    
        <Button
            android:id="@+id/signin"
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:layout_marginRight="10dp"
            android:text="Sign In"
            app:layout_constraintRight_toRightOf="parent"
            />
    
        <Button
            android:id="@+id/siginup"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="10dp"
            android:text="Sign Up"
            app:layout_constraintRight_toLeftOf="@id/signin"
            app:layout_goneMarginRight="120dp"/>
    </android.support.constraint.ConstraintLayout>
    

运行范例,显示结果如下

然后给 Sign In 添加下列属性

android:visibility="gone" 

运行范例,显示结果如下

可以看到,我们给 Sign In 加上一个 android:layout_marginRight="10dp" , 为了使 Sign In 隐藏后,Sign Up 仍能纹丝不动,给 Sign Up 设置了 app:layout_goneMarginRight="120dp"

参考文档

  1. Android ConstraintLayout Guideline

  2. Android ConstrantLayout

Android 基础教程

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.