Android开发之ConstraintLayout

不同于以往的布局,约束布局可以不写代码,而是用类似图形化编程的方式进行布局。

基本功能

新建一个空白项目,进入后就可以看到默认代码本身就是约束布局:
在这里插入图片描述
在右侧预览界面,选中Hello World的文本框,按delete就可以删除,我们可以看到代码也发生了相应的变化:
在这里插入图片描述
在设计界面左侧,我们可以选择组件,拖动放置到预览屏幕中:
在这里插入图片描述
但此时,如果运行虚拟机,会发现该按钮处于屏幕斜上方,与预览界面显示的不一致:
在这里插入图片描述

这是因为我们没有对该组件进行约束,导致组件默认放置于左上角。点击组件四周的圆圈,将其拖动至屏幕边缘,就可以让组件被拉动到紧贴边缘的位置。当四个圆圈都添加约束后,组件就被居中了,如图所示。
在这里插入图片描述
约束布局也可以进行子组件之间相对布局,也是通过组件四周的圆圈之间连接并拖动达成的:
在这里插入图片描述
而右侧的Layout窗口则可以设置组件的偏移,与父容器的间距等:
在这里插入图片描述
其中的箭头可以点击,来切换组件的宽高是wrap_contentmatch_parent还是fixed,与代码中的对应。
在这里插入图片描述
按钮的文本、id等属性都可以在右侧编辑……

辅助线

因为约束布局类似于图形编程,所以设置一些辅助线方便我们作图也是很合理的,点击左上方的guideline,就可以添加辅助线。点击显示在屏幕上方的圆圈,可以切换尺度(比如像素绝对值、百分比),当我们想要做一条垂直的中线时,就可以切换到百分比,然后拖动至50%处(拖动点击的位置比较苛刻,需要在圆圈底端与屏幕相切处):
在这里插入图片描述
借助这条辅助线,我们就能做出关于中线对称等效果(点击左上角眼睛图案可以选择显示所有约束):
在这里插入图片描述

推导约束

前面也说了,必须要有约束,组件的位置才能跟预览界面一致,否则会默认到左上角。但推导约束(Infer Constraint)可以根据当前拖动出来的布局自动创建约束,堪称大杀器。

先清除我们已有的约束(此时运行模拟器可以看到两个按钮都跑到了左上角):
在这里插入图片描述
再点击推导约束:
在这里插入图片描述
就可以发现自动生成了许多新约束,使得虚拟机运行结果与预览效果一致。

ConstraintLayout是一种布局容器,可以通过约束来定位和调整视图的位置。在Android中,可以使用代码来生成ConstraintLayout的布局。根据提供的引用内容,可以看出在代码中生成ConstraintLayout的相关属性和约束。 可以通过设置视图的LayoutParams为ConstraintLayout.LayoutParams,并设置相关的约束属性来生成ConstraintLayout。比如可以设置视图的宽高、相对父容器的位置、与其他视图的相对位置等。 根据引用中的代码,可以看到通过设置不同的约束属性和值,比如通过设置app:layout_constraintLeft_toLeftOf和app:layout_constraintRight_toRightOf来将视图的左边界和右边界与父容器的左边界和右边界对齐。可以设置app:layout_constraintTop_toTopOf和app:layout_constraintBottom_toBottomOf来将视图的上边界和下边界与父容器的上边界和下边界对齐。可以设置app:layout_constraintHorizontal_bias和app:layout_constraintVertical_bias来调整视图在父容器中的水平和垂直位置。 此外,可以通过设置app:layout_constraintDimensionRatio来设置视图的宽高比。可以通过设置android:scaleType和android:src来设置视图的缩放和背景。 根据引用中的描述,可以通过类似图形化编程的方式进行布局,通过拖动组件四周的圆圈来设置约束,从而实现视图的相对布局。 总结来说,通过设置视图的LayoutParams为ConstraintLayout.LayoutParams,并设置相关的约束属性和值,可以在Android代码中生成ConstraintLayout的布局。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [【约束布局】ConstraintLayout 屏幕适配案例 ( 使用代码生成约束布局控件属性 )](https://blog.csdn.net/han1202012/article/details/125158941)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Android开发ConstraintLayout](https://blog.csdn.net/ShadyPi/article/details/123488352)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ShadyPi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值