【达内课程】布局控件之 ConstraintLayout

介绍

约束布局 ConstraintLayout 是一个 ViewGroup,可以在 Api9 以上的 Android 系统使用它,它的出现主要是为了解决布局嵌套过多的问题,以灵活的方式定位和调整小部件,ConstraintLayout 非常适合使用可视化的方式来编写界面。从 Android Studio 2.3 起,官方的模板默认使用 ConstraintLayout。

ConstraintLayout 官方文档

基本使用

添加依赖

app/build.gradle 文件中添加 ConstraintLayout 的依赖

implementation 'androidx.constraintlayout:constraintlayout:2.0.4'

添加约束

新建一个空项目,Android Studio会自动帮我们创建好一个布局,默认使用 ConstraintLayout

我们将 xml 切换到 Design 模式。现在主操作区域内有两个类似于手机屏幕的界面,左边的是预览界面,右边的是蓝图界面。这两部分都可以用于进行布局编辑工作,区别是左边部分主要用于预览最终的界面效果,右边部分主要用于观察界面内各个控件的约束情况。

如果我们想让 Button 位于布局的右下角,可以进行如下操作:
在这里插入图片描述
首先从左侧的 Palette 区域拖一个 Button 进去,可以看到 Button 的上下左右各有一个圆圈,这圆圈就是用来添加约束的。每个控件的约束都分为垂直和水平两类,一共可以在四个方向上给控件添加约束。我们给 Button 的右边和下边添加了约束,因此 Button 就会将自己定位到布局的右下角了。

如果想让 Button 居中,就需要给它的上下左右都添加约束:
在这里插入图片描述
除此之外,我们还可以使用约束让一个控件相对于另一个控件进行定位。比如说,我们希望再添加一个 Button,让它位于第一个 Button 的正下方,并且间距 84dp:
在这里插入图片描述
删除约束

第一种用于删除一个单独的约束,将鼠标悬浮在某个约束的圆圈上,然后该圆圈会变成同心圆,这个时候单击一下,约束线变成实线后,按下键盘上的 Del 键即可删除
在这里插入图片描述
第二种用于删除某一个控件的所有约束,选中一个控件,右键 -> Clear Constraints of Selection
在这里插入图片描述
第三种用于删除当前界面中的所有约束,点击工具栏中的删除约束图标即可:
在这里插入图片描述

Attributes

选中任意一个控件的时候,在右侧的 Attributes 区域就会出现很多的属性选项
在这里插入图片描述
在这里可以设置当前控件的所有属性,这里不再进行详细介绍,自己操作一下就知道了。下面介绍 Layout 这一部分内容

我们可以看到有一个纵向的轴和一个横向的轴,这两个轴也是用于确定控件的位置的。我们让第一个 Button 居中显示了,其实就是因为这里纵横轴的值都是50。如果调整了纵横轴的比例,那么Button的位置也会随之改变:
在这里插入图片描述
正方形区域,它是用来控制控件大小的。正方形周围输入框能控制边距。中间的符号一共有三种模式可选,每种模式都使用了一种不同的符号表示,点击符号即可进行切换。
在这里插入图片描述
在这里插入图片描述
表示 wrap_content,此时可以使用下列属性来控制最大、最小的高度或宽度:

android:minWidth 最小的宽度
android:minHeight 最小的高度
android:maxWidth 最大的宽度
android:maxHeight 最大的高度

注意!当 ConstraintLayout 为 1.1 版本以下时,使用这些属性需要加上强制约束,如下所示:

app:constrainedWidth=true”
app:constrainedHeight=true

在这里插入图片描述
表示固定大小
在这里插入图片描述
表示any size,它有点类似于 match parent,但和 match_parent 并不一样,是属于 ConstraintLayout 中特有的一种大小控制方式,下面我们来重点讲解一下。

首先需要说明,在 ConstraintLayout 中是有 match_parent 的,只不过用的比较少,因为 ConstraintLayout 的一大特点就是为了解决布局嵌套,既然没有了布局嵌套,那么 match_parent 也就没有多大意义了。所以官方不推荐在 ConstraintLayout 中使用 match_parent,可以设置 0dp (MATCH_CONSTRAINT) 配合约束代替 match_parent。

我们将 Button 的宽度指定成any size,它就会自动充满整个布局了:
在这里插入图片描述
这和 match_parent 有什么区别呢?其实最大的区别在于,match_parent 是用于填充满当前控件的父布局,而any_size是用于填充满当前控件的约束规则。举个例子更好理解,如果我们有一个新的 Button,它的其中一个约束是添加到当前这个 Button 上的,那么any_size的效果也会发生改变:

在这里插入图片描述

我们切换到code 模式看下代码中是如何写的

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/button10"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:text="Button"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/button13"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:text="Button"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/button10" />
</androidx.constraintlayout.widget.ConstraintLayout>

属性

  • layout_constraintLeft_toLeftOf // 将所需视图的左边与另一个视图的左边对齐
  • layout_constraintLeft_toRightOf
  • layout_constraintRight_toLeftOf
  • layout_constraintRight_toRightOf
  • layout_constraintTop_toTopOf
  • layout_constraintTop_toBottomOf
  • layout_constraintBottom_toTopOf
  • layout_constraintBottom_toBottomOf
  • layout_constraintBaseline_toBaselineOf
  • layout_constraintStart_toEndOf
  • layout_constraintStart_toStartOf
  • layout_constraintEnd_toStartOf
  • layout_constraintEnd_toEndOf

这些属性根据名字就很容易知道它们的意思。

举例:实现以下效果
在这里插入图片描述

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <TextView
        android:id="@+id/tv1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        ...
        android:text="TextView1" />

    <TextView
        android:id="@+id/tv2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView2"
        ...
        app:layout_constraintLeft_toRightOf="@+id/tv1" />

    <TextView
        android:id="@+id/tv3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView3"
        ...
        app:layout_constraintTop_toBottomOf="@+id/tv1" />
</androidx.constraintlayout.widget.ConstraintLayout>

layout_constraintLeft_toRightOf

对于一个View的边界界定,官方给了下面这张图:
在这里插入图片描述
一般情况下只是用 layout_constraintLeft_toRightOf 效果是这样的:
在这里插入图片描述
如图所示,两个 TextView 的高度不一致,但是又希望他们文本对齐,这个时候就可以使用 layout_constraintBaseline_toBaselineOf
在这里插入图片描述

<TextView
        android:id="@+id/tv1"
        android:layout_width="wrap_content"
        android:layout_height="40dp"
        android:background="#D8BFD8"
        android:gravity="center"
        android:text="TextView1" />

    <TextView
        android:id="@+id/tv2"
        android:layout_width="wrap_content"
        android:layout_height="20dp"
        android:background="#DDA0DD"
        android:text="TextView2"
        app:layout_constraintBaseline_toBaselineOf="@+id/tv1"
        app:layout_constraintLeft_toRightOf="@+id/tv1" />

角度定位

角度定位指的是可以用一个角度和一个距离来约束两个空间的中心

上面例子中的 TextView2 使用以下3个属性:

app:layout_constraintCircle="@+id/tv1"
app:layout_constraintCircleAngle="120"(角度)
app:layout_constraintCircleRadius="150dp"(距离)

在这里插入图片描述
TextView2 的中心在TextView1的中心的 120度,距离为 150dp

边距
ConstraintLayout 的边距常用属性如下:

  • android:layout_marginStart
  • android:layout_marginEnd
  • android:layout_
最低0.47元/天 解锁文章
ConstraintLayout各种居中设置
wangqing830414的专栏
10-27 8592
1 全局居中 app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" 2 顶部水平居中 app:layout_constraintEnd_toEndOf="parent" app:layou.
android constraintlayout垂直居中_强大的 ConstraintLayout
weixin_39525933的博客
11-02 1940
(给安卓开发精选加星标)来自:简书,作者:QuincySxhttps://www.jianshu.com/p/036c6ec288d简介现在改为默认使用 ConstraintLayout 布局,今天我们简单看看这个布局的使用。ContraintLayout 是一个 Google 发布的一个新布局( 翻译成中文 “约束布局“ )它的使用方式有两种在 AS 2.3 以上版本都可以使用鼠标拖动...
android ConstraintLayout 压在另一个控件的居中
最新发布
weixin_41501409的博客
07-29 78
Android ConstraintLayout 居中控件的实现指南 作为一名经验丰富的开发者,我经常被问到如何在Android开发中实现ConstraintLayout中的控件居中显示。对于刚入行的开发者来说,这可能是一个令人困惑的问题。不过不用担心,我将通过这篇文章,一步步教你如何实现这个功能。 流程概览 首先,让我们...
ConstraintLayout各种居中的实现
u010227042的博客
01-08 7255
Centring 常见的居中包括在父容器的居中,相对于兄弟view的居中,甚至是相对于兄弟view的边界居中。本文将探讨ConstraintLayout下实现这些居中的技巧。 居中一般都是针对android:layout_[width|height]="wrap_content"或者固定大小的view。下面的例子都是在这一前提下。 父容器中的居中 要让一个view在parent中居中...
android constraintlayout垂直居中_2020 年Android入门教程之ConstraintLayout布局 005
weixin_39674978的博客
11-25 327
今天来学习下ConstraintLayout这个布局。目前在最新版本的Android Studio 中新创建一个项目之后。默认创建的activity布局中使用的根布局ConstraintLayoutConstraintLayout是什么,在我看来,它就是RelativeLayout的升级版本。今天我们就来学习下这个布局,但是我们作为入门教程,不会很深入的讲解,这个布局内容还是蛮多的。首先,更改...
达内课程 unix系统下c语言课程
05-12
【标题】:“达内课程 Unix系统下C语言课程” 【描述】:“此资源包含了我在达内教育参加的Unix系统下C语言课程的学习资料,由知名讲师闵大神主讲。课程设计逻辑清晰,讲解深入浅出,对于学习C语言在Unix环境下的...
JAVA数据库编程(达内课程)
08-28
JAVA数据库编程(达内课程)
达内Unity课程四个月学习笔记
01-12
在Unity3D的学习旅程中,达内的四个月课程涵盖了从基础到高级的多个关键知识点,旨在帮助学员掌握这款强大的游戏开发引擎。以下是根据这四个月学习笔记中的关键内容所提炼的详细知识点: 一月内容主要涉及Unity的...
android启动activity文本框不获得焦点
03-09 215
‍在开发中,常常会碰到这种情况,打开一个activity后,第一个文本框自动获得焦点,同时会弹出软键盘输入框,这样很影响用户体验,现在来看解决方法。 我们先来看看为什么会出现上述情况,原因很简单,文本框默认是会获得焦点的,获得焦点之后当然会继续弹出输入框,等待输入,针对此原因...
约束布局ConstraintLayout,竖直方向,按钮放在底部,上面recyclerView竖直在底部控件上方充满
wutian3998的专栏
11-29 267
android:text="致电"
android constraintlayout垂直居中_Android 界面布局概览
weixin_39634237的博客
11-21 386
布局可定义应用中的界面结构(例如Activity的界面结构)。布局中的所有元素均使用View和ViewGroup对象的层次结构进行构建。View通常绘制用户可查看并进行交互的内容。然而,ViewGroup是不可见容器,用于定义View和其他ViewGroup对象的布局结构,如图 1 所示。图 1.定义界面布局的视图层次结构图示View对象通常称为“微件”,可以...
ConstraintLayout系列:ConstraintLayout实现局部垂直居中
知道这个有什么用?
05-28 1627
又发现ConstraintLayout一个优点,先看效果图: 上方的绿色区域,固定高度400dp,所以在不同的设备屏幕上,下方所剩的区域高度就是不固定的。要想下方的红色区域始终垂直居中,用LinearLayout和RelativeLayout都需要套两层才能实现。用ConstraintLayout只需要添加几个属性就好了。 核心代码: app:layout_constraintTop_toBottomOf="@id/rl_top" app:layout_constrai.
android constraintlayout垂直居中_11期 | 实践一个Android布局引发的思考
weixin_39554170的博客
11-27 822
sophie小姐陪你进阶Android没有什么是做不到的搜索微信号 ru2211785113加入我的Android技术群一个Android布局引发的思考你确定你对Android布局精通了吗?如果你能立马用LinearLayout,RelativeLayoutConstraintLayout说出如何让两个TextView...
android constraintlayout垂直居中_9102了,必须要懂 ConstraintLayout
weixin_39637924的博客
11-23 2634
码个蛋(codeegg)第 726 次推文作者: GitCode8原文: https://juejin.im/post/5d12c4146fb9a07ea33c24b7前言最近中毒很深,经常逛掘金,看到很多优秀的文章,感谢掘金。同时也看到很多标题,看看XXXX,一篇就够了。技术一直在不停的更新迭代,看一篇永远是不够的,建议再看一遍官网的,可以看到被作者过滤掉的信息或者最新的更新。这就是我为什么会在...
android xml正方形,使用Android Constraintlayout创建一排均匀分布的正方形
weixin_29230773的博客
05-26 435
我正在努力创建一个由均匀分布的正方形链组成的布局,这些正方形可以填充可用空间。使用Android Constraintlayout创建一排均匀分布的正方形我到底想要的布局,看起来像这样: 的想法是,与不同的宽高比手机这个正方形成长一点点地使用了额外的空间。我设法创建权重链与此布局xmlns:android="http://schemas.android.com/apk/res/android"xm...
写文章

热门文章

  • Cygwin安装教程 123723
  • 【Git】Git撤销add操作 65002
  • 安卓手机投屏到win10电脑 64970
  • 打开浏览器默认是360导航解决办法 50872
  • 用Windows自带画图软件吸取色值 48769

分类专栏

  • Jetpack最全简析 付费 10篇
  • Linux从入门到接着入门 付费 49篇
  • Windows 批处理从入门到还行 付费 8篇
  • Photoshop从入门到入狱 付费 28篇
  • Vue学习笔记 65篇
  • TypeScript学习笔记 10篇
  • uni-app快速上手 24篇
  • Node.js 1篇
  • Android开发高手课
  • RxJava系列教程 1篇
  • Android从入门到放弃 183篇
  • Android Studio使用 25篇
  • 达内安卓培训 188篇
  • app开发问题 68篇
  • Kotlin从零到一无所有 46篇
  • Java从入门到跑路 9篇
  • Git教程 31篇
  • other 41篇
  • Android优化 5篇
  • Glide 8篇

最新评论

  • 【kotlin】Eclipse和kotlin插件安装

    lingorare: 请问在marketplace中install时一直报错 Problems occurred while performing provisioning operation: operation plan must be resolved,说是JustJ OpenJDK Host JRE Complete和kotlin冲突,该怎么办呢?

  • Cygwin安装教程

    number007cool: 我cygcheck -c cygwin 检查是安装成功的,但是gcc g++ 都没有,该怎么装

  • Cygwin安装教程

    number007cool: linux 下的动态库,在cygwin下能被正常使用么

  • Cygwin安装教程

    Yl33944: 请问为什么按照步骤安装但是在验证时显示No setup information found

  • Cygwin安装教程

    qq_66112157: 我安装的cygwin,运行全部是英文版本,我如何将其变为中文版本?

大家在看

  • device靶机详解
  • AI大模型学习 1291
  • 强化学习基础:主要算法框架与Python实现示例 474
  • 【路径规划】 红嘴蓝鹊优化器:一种用于2D/3D无人机路径规划和工程设计问题的新型元启发式算法 497
  • Android 系统裁剪和定制 1485

最新文章

  • 【敬伟ps教程】三维、视频
  • 【敬伟ps教程】滤镜系列
  • 【敬伟ps教程】高级抠图
2024年16篇
2023年21篇
2022年100篇
2021年10篇
2020年120篇
2019年193篇
2018年187篇
2017年164篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

玻璃钢生产厂家三明树箱玻璃钢雕塑定做小品玻璃钢雕塑推荐货源陕西玻璃钢花盆哪里有广东玻璃钢卡通动物雕塑园林小品丰台区商场美陈公司玻璃钢雕塑小品生产厂家玻璃钢牛雕塑生产厂家抽象歌舞玻璃钢雕塑图片河北涞水玻璃钢雕塑益阳玻璃钢雕塑制作公司哪家好玻璃钢小品雕塑公司商场周年美陈广东人物玻璃钢雕塑优势池州定制玻璃钢雕塑制作吉林环保玻璃钢雕塑优势玻璃钢雕塑潍坊上海玻璃钢关公雕塑福建玻璃钢仿真水果雕塑价格山东商场美陈价钱河北直销玻璃钢雕塑按需定制太极雕塑玻璃钢沂源玻璃钢花盆花器台州玻璃钢雕塑电话河南泡沫玻璃钢雕塑玻璃钢马雕塑生产厂家北京节庆商场美陈研发公司玻璃钢人像雕塑公司沭阳玻璃钢雕塑厂家玻璃钢天鹅雕塑价格花盆玻璃钢花盆香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化