五、ConstraintLayout(约束布局)布局介绍
参考: ConstraintLayout官方文档
目前可以使用各种类型的约束:
1.相对定位
2.边缘
3.定心定位
4.圆形定位
5.可见性行为
6.尺寸限制
7.链
8.虚拟助手对象
9.优化器
注意,约束中不能具有循环依赖关系。
相对定位是在约束布局中创建布局的基本构建块之一。这些约束允许您将给定的小部件相对于另一个小部件定位。可以在水平和垂直轴上约束小部件:
1.水平轴:左、右、起点和终点
2.垂直轴:顶部、底部和文本基线
一般的概念是将控件的给定边约束到任何其他窗口小部件的另一边。
例如,为了将按钮B定位到按钮A的右边:
这告诉系统,我们希望按钮B的左侧被约束到按钮A的右侧。这样的位置约束意味着系统将试图使双方共享相同的位置。
以下是可用约束的列表:
他们都引用了id对于另一个小部件,或父母(它将引用父容器,即约束布局):
如果设置了边距,则它们将应用于相应的约束(如果存在),将边距强制为目标和源边之间的空间。 通常的布局边距属性可用于此效果:
当位置约束目标的可见性为View.GONE时,您还可以使用以下属性指示要使用的不同边距值:
ConstraintLayout是如何处理“不可能”的约束。例如,如果我们有这样的事情:
除非ConstraintLayout恰好具有与Button完全相同的大小,否则两个约束不能同时满足(双方都不能成为我们希望它们的位置)。
在这种情况下发生的事情是,约束的作用就像是相反的力量将小部件拉平; 这样小部件最终将在父容器中居中。 这同样适用于垂直约束。
遇到这种相反的约束时的默认设置是使窗口小部件居中; 但是您可以使用偏差属性调整定位以支持一侧而不是另一侧:
例如,以下将使左侧具有30%的偏差而不是默认的50%,使得左侧将更短,小部件更倾向于左侧:
使用偏差,您可以制作更好地适应屏幕尺寸变化的用户界面。
你可以以角度和距离约束窗口小部件中心相对于另一个窗口小部件中心。 这允许你将小部件放在圆上。 可以使用以下属性:
像往常一样,GONE小部件不会显示,也不是布局本身的一部分(即如果标记为GONE,它们的实际尺寸将不会更改)。
对于布局传递,它们的尺寸将被视为零(基本上,它们将被解析为一个点)
如果他们对其他小部件有限制,他们仍然会受到尊重,但任何边距都会好像等于零
这种特定的行为允许构建布局,你可以临时标记小部件。GONE,不破坏布局,这在做简单布局动画时特别有用。
约束布局的最小尺寸
你可以为ConstraintLayout本身定义最大和最小大小:
当其尺寸设置为WRAP_CONTENT时,ConstraintLayout将使用这些最小和最大尺寸。
可以通过以3种不同的方式设置android:layout_width和android:layout_height属性来指定控件的大小:
1.使用特定值
2.使用WRAP_CONTENT,它将要求小部件计算其自身大小。
3.使用0dp,相当于“MATCH_CONSTRAINT”
前两个以与其他布局类似的方式工作。 最后一个将以匹配所设置的约束的方式调整窗口小部件的大小((a)是wrap_content,(b)是0dp)。 如果设置了边距,则在计算中将考虑它们((c)中的0dp)。
如果维度设置为WRAP_CONTENT,则在1.1之前的版本中,它们将被视为文字维度 - 这意味着约束不会限制生成的维度。 虽然通常这足够(并且更快),但在某些情况下,您可能希望使用WRAP_CONTENT,但仍然强制执行约束以限制结果维度。 在这种情况下,您可以添加一个相应的属性:
当维度设置为MATCH_CONSTRAINT时,默认行为是使结果大小占用所有可用空间。 还有几个额外的修饰符:
layout_constraintWidth_min和layout_constraintHeight_min:将设置此维度的最小大小
layout_constraintWidth_max和layout_constraintHeight_max:将设置此维度的最大大小
layout_constraintWidth_percent和layout_constraintHeight_percent:将此维度的大小设置为父级的百分比
为min和max指示的值可以是Dp中的维度,也可以是“wrap”,它将使用与WRAP_CONTENT相同的值。
要使用百分比,您需要设置以下内容:
1.尺寸应设置为MATCH_CONSTRAINT(0dp)
2.默认值应设置为app app:layout_constraintWidth_default =“percent”或app:layout_constraintHeight_default =“percent”
3.然后将layout_constraintWidth_percent或layout_constraintHeight_percent属性设置为0到1之间的值
您还可以将窗口小部件的一个维度定义为另一个维度的比率。 为此,您需要将至少一个约束维度设置为0dp(即MATCH_CONSTRAINT),并将属性layout_constraintDimensionRatio设置为给定比率。 例如:
将按钮的高度设置为与其宽度相同。
该比率可表示为:
浮点值,表示宽度和高度之间的比率
“宽度:高度”形式的比率
如果两个尺寸都设置为MATCH_CONSTRAINT(0dp),您也可以使用比率。 在这种情况下,系统设置满足所有约束的最大尺寸并保持指定的纵横比。 要根据另一个的尺寸约束一个特定边,可以预先附加W,“或H,分别约束宽度或高度。例如,如果一个维度受两个目标约束(例如,宽度为0dp并且以父对象为中心) 你可以通过在比率前添加字母W(用于约束宽度)或H(用于约束高度)来指示哪一边应该被约束,用逗号分隔:
将按照16:9的比例设置按钮的高度,而按钮的宽度将匹配父项的约束
链在单轴(水平或垂直)上提供类似组的行为。另一个轴可以独立地约束。
一组小部件被认为是一个链,如果它们通过双向连接被连接在一起(参见图,显示最小链,带有两个小部件)。
链由链的第一个元素(链的“头”)所设定的属性控制:
头部是水平链最左边的小部件,也是垂直链最顶端的小部件。
如果在连接上指定了边距,则会考虑它们。 在扩散链的情况下,将从分配的空间中扣除边距。
在链的第一个元素上设置属性layout_constraintHorizontal_chainStyle或layout_constraintVertical_chainStyle时,链的行为将根据指定的样式更改(默认为CHAIN_SPREAD)。
1.CHAIN_SPREAD - 元素将展开(默认样式)
加权链 - 在CHAIN_SPREAD模式下,如果某些小部件设置为2.MATCH_CONSTRAINT,它们将拆分可用空间
3.CHAIN_SPREAD_INSIDE - 类似,但链的端点不会分散
4.CHAIN_PACKED - 链的元素将被打包在一起。 然后,子项的水平或垂直偏差属性将影响打包元素的定位
链的默认行为是在可用空间中平均分布元素。如果一个或多个元素使用MATCH_CONSTRAINT,它们将使用可用的空白空间(在它们之间平均分配)。 layout_constraintHorizontal_weight和layout_constraintVertical_weight属性将控制如何使用MATCH_CONSTRAINT在元素之间分配空间。例如,在使用MATCH_CONSTRAINT的包含两个元素的链上,第一个元素使用权重2,第二个元素使用权重1,第一个元素占用的空间将是第二个元素占用的空间的两倍。
在链中的元素上使用边距时,边距是相加的。
例如,在水平链上,如果一个元素定义了10dp的右边距,而下一个元素定义了5dp的左边距,则这两个元素之间产生的边距为15dp。
在计算链用于定位项目的剩余空间时,会同时考虑项目及其边距。剩余空间不包含边距。
除了前面详述的内在功能之外,您还可以使用ConstraintLayout中的特殊帮助程序对象来帮助您进行布局。 目前,Guideline对象允许您创建相对于ConstraintLayout容器定位的水平和垂直指南。 然后可以通过将小部件限制为这样的指导来定位小部件。
在1.1中我们公开了约束优化器。 您可以通过将标记app:layout_optimizationLevel添加到ConstraintLayout元素来决定应用哪些优化。
none:不应用任何优化
standard :默认。 仅优化直接和屏障约束
direct:优化直接约束
barrier:优化障碍限制
chain:优化链约束(实验)
dimensions:优化维度度量(实验),减少匹配约束元素的度量数量
关于几组英语单词的区别 高手进来吧
1RESTRAIN 有抑制克制的意思 但是主要指自我克制 而constrain 主要是被抑制被克制 restrict有以法规约束的意思refrain有戒除的意思confine 主要是被动形式 指被限制在某范围内2detain 有因故逗留的意思如火车晚点等 也可有羁押的意思 retain是指保留 sustain是支撑保持等也可以指遭受 maintain是维护维持 attain...
近义词区别
大家可以给讲一下这几个词的用法吗?refrainrestrainconstrainrestrict我知道它们的意思了,可做选择题时老不知应选哪一个... 大家可以给讲一下这几个词的用法吗?refrain restrain constrain restrict我知道它们的意思了,可做选择题时老不知应选哪一个 展开 我来答 ...
boundary与constrain与limitation有什么区别
boundary 范围上的边界 limitation 限制 constrain 约束
几组英语近义单词 有什么区别
growth:成长(从所在的某一点进到一个更高点)rise:升起(形体上的从某一低点到高点的运动)increase:(量的增大)German's R-count for the first quarter of 2001 showed the second-steepest (growth) in the past two decades.constrain:包括在某一范围内的“限制”,如“划地为牢”;res...
limit的同义词有哪些?
limit的同义词有以下几种:restrict:限制,约束,限定 confine:限制,禁闭,局限 constrain:限制,强迫,约束 restrain:限制,抑制,控制 curb:限制,抑制,勒住 这些同义词都有“限制”的意思,但是在不同的语境下有不同的用法。
sql语句中constraint是什么意思
是用来添加完整性约束条件,并且指定该约束条件的名字(这样就方便以后删除这个约束条件)。Constrain也可以用在Create语句中,在建表时就用它来设置 PRIMARY KEY, FOREIGN KEY, CHECK 等约束。
托福考试中容易用混的词(2)
constrain ,restrain constrain: 强迫、迫使 restrain: 束缚、限制行动 记忆要诀:con-前缀一般都有“把。。。聚集\/汇拢在一起”的意念,带有强制性 的感觉,因此constrain 是“强迫、迫使”re-前缀一般是指“向后的运动”discreet. discrete, discretion discreet \/di&...
不同不同的近义词
不同凡响,异乎寻常,与众不同 问题三:跟其他人不一样的近义词 你好!跟其他人不一样的近义词有:与众不同、异乎寻常、独出心裁、独具匠心、别具一格、独树一帜、卓尔不群、鹤立鸡群 、出类拔萃、举世无双等等。希望对你有帮助,望采纳~问题四:近义词区别 constrain, refrain, restrain, ...
arduino约束函数的含义
在Arduino编程中,"约束函数"通常指的是 `constrain()` 函数。这个函数的作用是将一个给定的值限制在指定的范围内。它的语法如下:```cpp constrain(value, min, max)```- `value`:要进行约束的值。- `min`:限制的下界。如果 `value` 小于 `min`,则返回 `min`。- `max`:限制的上界。
restraint和constraint的区别
2,constrain 指强制性抑制或制止他人的行为。名词constraint后也接介词 on。1) He constrained his daughter from going out to date with boys during the night.(他禁止他的女儿夜晚外词汇与男孩约会。)2) The policemen had difficulty in constraining the crowd from rushing onto the football ...
长温盐酸: Android ConstraintLayout的基础使用方法:ConstraintLayout翻译成中文也称为约束布局,在整个使用体验过程中真的是贯穿约束二字,这一节先来介绍一些基础使用,后面你就会慢慢感受到约束布局的魅力.创建完工程后打开布局文件,底部...
新和县17844951192: 为什么ConstraintLayout代替其他布局 - ?
长温盐酸: ConstraintLayout约束布局的含义: 根据布局中的其他元素或视图, 确定View在屏幕中的位置. 包含三个重要信息, 根据其他视图设置位置, 根据父容器设置位置, 根据基准线设置位置.layout_constraint[本源]_[目标]="[目标ID]" 例如:app:...
新和县17844951192: android constraintlayout是不是绝对布局 - ?
长温盐酸: 不是 Activity是android的一个重要组件,主要负责和用户交互部分,有自己的生命周期,在其上可以布置按钮,文本框等各种控件,简单来说就是Android的UI部分.只能说一般情况下会指定一个layout布局,通常是定义在layout文件夹下.xml文件.也可以是一个具体的View视图.也可以什么都不加,也不会出错,仅仅一片黑.
新和县17844951192: constraint - layout 好用吗 - ?
长温盐酸: ConstraintLayout是Android Studio 2.2中具有亮点的新功能之一,相比于RelativeLayout、LinearLayout等传统布局,它打破了开发者使用XML编写布局的依赖. 虽然传统布局也可以使用可视化界面拖动控件来搭建布局,但是因为不够灵活,大多...
新和县17844951192: 如何添加constraintlayout依赖 - ?
长温盐酸: 看一下NSLayoutConstraint的api 只有constant可以修改,其它都是只读的. 要改其它的属性,就得移除这个constranit再加入一个新的.然后update一下. 想修改,肯定得先找到吧.添加的时候,记录一下,第二就是 循环查找.
新和县17844951192: android constraintlayout 布局预览怎么打开 - ?
长温盐酸: layout目录下的布局页面不是默认就有显示在右边的吗?如果你把那个预览窗口关了,点击左下角那个图标,选择“preview”重新打开就行了
新和县17844951192: 在sql中,constraint用法 - ?
长温盐酸: 是用来添加完整性约束条件,并且指定该约束条件的名字(这样就方便以后删除这个约束条件). Constrain也可以用在Create语句中,在建表时就用它来设置 PRIMARY KEY, FOREIGN KEY, CHECK 等约束.
新和县17844951192: sql语句建表主键问题,请问建表时,如何用好constraint,最好能给出具体的语句,别长编大论 - ?
长温盐酸: 是可选关键字,表示 PRIMARY KEY、NOT NULL、UNIQUE、FOREIGN KEY 或 CHECK 约束定义的开始.如:1. PRIMARY KEY 约束 CONSTRAINT PK_emp_id PRIMARY KEY2. FOREIGN KEY 约束 CONSTRAINT FK_sales_backorder ...
新和县17844951192: android constraintlayout怎么改成别的 - ?
长温盐酸:setLayout();l里面的c不是字符类型的,标准格式为setLayout(5,5);或setLayout(null);CardLayout是卡片类,你已经new出来了就可以使用了,不必在使用setLayout(); 使用setMargin();添加到容器中