
大家好,又见面了,我是全栈君。

在本篇文章中,你会学习到有关ConstraintLayout — 一种构建于弹性Constraints(约束)系统的新型Android Layout。最终你将会在Android Studio中编辑与构建一个相对复杂的Layout。
收获
需求
File>New>Import Project,选择步骤2下载的示例代码的文件夹constraint-layout-start。Gradle sync按钮。Project面板内打开 res/layout/activity_main_done.xmlDesign选项显示最终的layout编辑界面Virtual Device to render the layout with为Nexus 5xLayout引擎使用Contraints指定每个widget来决定他们在layout中的位置。你可以使用Android Studio Layout编辑器界面来手动或者自动指定约束。要更好的理解他,需要我们了解一下他对一个选中的widget的基本控键。
Constraints
Constraints帮助你保持widgets对齐。你可以使用箭头来决定各widgets的对齐规则。例如(图示 A),从button 2左侧控键设置一个constraint到button 1的右侧控键意味着:button 2会放置于button 1右侧56dp处

图示 A
控键类型

图示 B:不同类型的控键

24dp。


太长;别读
现在,让我们开始来构建你自己的Constraint Layout。
从左侧导航栏打开 res/layout/activity_main_start.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="match_parent">
</android.support.constraint.ConstraintLayout>在编辑器底部转换到Design选项

ImageView
添加一个ImageView到layout。在编辑器内,找到ImageView拖到layout内。
ImageView一旦拖到layout中,UI会提示需要resource。constraint-layout-start已经包含了resources,请选择@drawable/singaporeresource。
一旦选中ImageView,你可以点击并按住调整尺寸控键来调整图片大小。

TextView
找到TextView并拖到layout内。 
我们会看到一些警告,因为在ImageView以及TextView内没有contentDescription属性。内容描述(Content Description)属性对于构建可访问应用非常重要。让我们为该属性添加@string/dummy。
在右侧,Inspector面板可以改变已选择widget的各种属性。

ImageView并添加@string/dummy到contentDescription属性ImageView的其他属性。修改scaleType为centerCrop。TextView,使用该面板修改text值为@string/singapore。创建一个约束,你需要在widget的某个控键上点击并按住,然后拖到两一个widget的约束控键内。一旦显示绿色,你就可以松手了最终约束就会被创建。

注意:该部分讲有关手动创建约束的,需要将左上角的自动创建约束按钮关闭

在开始之前,确保ImageView和TextView在layout内。我们的目标是在容器、ImageView以及TextView之间创建约束。
假设我们想要TextView置于ImageView下方。我们可以在TextView的顶部控键与ImageView的底部控键创建一个约束,如图:

移除约束:移除某个约束只需点击指定约束的控键;移除全部约束需要点击如下按钮:

下一步,创建ImageView跟容器顶部的约束

最后,创建ImageView左右两侧的约束

89f057b3a8ea3e0b.png
创建基线约束 – 连接widget的基线控键到另一个的基线

在此部分,我们会了解一下Inspector。它在UI编辑器的右侧。附带有已选择widget的各种相关属性,而且还显示了该视图是如何对齐与约束的。
TextViewImageView底部约束此时,UI构建起如下图:

以下部分描述了不同的元素和他们的使用方法:
Margins – widget的外围上下左右为margins。你可以点击按钮设置不同的值来改变margins。在上边截图中,margins设置为16dp
移除constraint – 在Inspector内点击连接widget与container的线,可以移除约束。当然也可以点击已设置约束的控键来移除。
相对于约束来放置widget – 当在一个widget有至少两个相对的连接,比如说顶部和底部,或者左侧和右侧,然后就可以使用滑动条来调节widget在链接中的位置。你还可以改变屏幕方向来进一步调整方位。

控制widget内部尺寸 – Inspector内部的线让你可以控制widget内部尺寸。


Fixed – 可以调整widget的宽度和高度

AnySize – 使得widget占据所有可用的控键来满足约束

AnySize应用之前

AnySize应用之后

Wrap Content – 含有text或者drawable的widget扩大到填满整个容器
Autoconnect自动创建widgets之间的连接。开始之前
res/layout/activity_main_autoconnect.xmlAutoconnect(译注:小磁铁图标)接下来,选中ImageView并且拖到layout的中心,如下图所示:

下一步,下方的动图展示了以下几个步骤

10210fd273ea1a86.png
ImageView对齐顶部并使用Inspector(AnySize)来确保他扩展到两侧text为@string/upload以及左侧改为@string/discardTextView和一个Plain Text放到layout中。TextView和Plain Text为48dp。并自动创建约束。32dp的位置(译注:待更新)
原文链接:Using ConstraintLayout to design your views
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/108421.html原文链接:https://javaforall.cn