使用ConstraintLayout遇到的些许问题

本文介绍了ConstraintLayout的使用要点,包括控件宽高设置、margin生效条件、Group对控件可见性的影响、高度约束标准、自定义组合控件布局、bias属性生效条件、子控件约束指定、margin问题、Guideline和Chain使用、布局加载区别、goneMargin设置以及布局编辑器属性等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、控件的宽、高都不可设置为 match_parent,否则所有的约束失效

2、欲使设置的margin生效,须指定控件的约束对象。例如,欲使marginTop生效,须设定layout_constraintTop_toTopOf

3、被Group持有的所有控件,其visiblity只能由Group决定

4、以当前布局中不能准确知道高度的View为标准,例如:在一个布局中,左边TextView的内容是固定的文字,右边TextView的内容须根据具体业务进行动态设置,则其高度是不确定的,这种情况下高度约束均以右边为中心

5、自定义组合控件使用ConstraintLayout作为布局的根时,使用LinearLayout作为自定义控件的父布局时会造成自定义封装的布局展示不正确(宽高变形,与测量方式有关)。推荐使用FrameLayout作为根布局,同时固定高度

6、欲使layout_constraintVertical_bias属性生效,须设置上下约束。同样欲使layout_constraintHorizontal_bias属性生效,须设置左右约束

7、若ConstraintLayout不是根布局,则其中的子控件的约束不能指定为 parent,但可指定为父控件ConstraintLayout的id

8、layout_marginLeft和layout_marginRight不起作用:控件左右都约束了parent,但有时左右margin不起作用,可能是因为layout_width设置成了match_parent或者wrap_content,须改为match_constraint(即0dp)才会起作用

9、Guideline:

(1)layout_constraintGuide_percent属性值可以为负值,有时某些特殊的需求会用到

(2)对Guideline设置相对位置属性是不生效的,因此当我们想要一个相对于某个view的Guideline时,约束布局是不能满足的。此时可以用一个不可见的View作为Guideline的替代品来实现一些特殊布局需求,如布局重叠,这种方式可以弥补margin不能设置为负值的不足

10、Chain:

(1)在chainStyle=spread时才可以使用加权layout_constraintHorizontal_weight和layout_constraintVertical_weight 。

(2)注意Chain中的控件互相引用id的格式,是“@+id/button1”而非”@id/button1”。

(3)可以用Chain实现控件居中

11、注意View.inflate(getActivity(), R.layout.item, null)和LayoutInflater.from(getActivity()).inflate(R.layout.item, parent, false)区别,有时二者对ConstraintLayout布局会有不同的影响

12、在ConstraintLayout中,控件除了可以设置layout_marginXXX外,还可以设置其依赖的控件gone之后的margin,即layout_goneMarginXXX。就是说,可以根据被依赖控件的visibility,设置两种margin

13、使用布局编辑器多出了一些属性

layout_optimizationLevel
layout_editor_absoluteX
layout_editor_absoluteY
layout_constraintBaseline_creator
layout_constraintTop_creator
layout_constraintRight_creator
layout_constraintLeft_creator
layout_constraintBottom_creator

这些属性是 UI 编辑器用来辅助拖拽布局的,在实际使用过程中可以不用关心它们

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值