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小部件仍然是其中的一部分,具有重要的区别:
- 对于布局传递,它们的维度将被视为零 ( 基本上它们将被解析为一个点 )
- 如果它们对其它小部件有约束力,那么它们仍然会受到尊重,但任何 margin 都将等于 0
注意: A 的 margin 也被忽略了
这种特定行为下的布局,不管我们在哪里临时将小部件标记为 GONE, 都不会破坏原有的布局, 这点,在制作动画方面非常有用
范例
我们用一个 demo 来演示下这种特殊的行为
-
创建一个 空的 Android 项目
cn.twle.android.ConstraintLayout
-
修改
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"