第二种用于删除某一个控件的所有约束,选中一个控件,然后它的左下角会出现一个删除约束的图标,点击该图标就能删除当前控件的所有约束了,如下所示。

第三种用于删除当前界面中的所有约束,点击工具栏中的删除约束图标即可,如下图所示。

Inspector

=========================================================================

这样我们就把ConstraintLayout的基本用法学完了,接下来我们开始学习一些进阶的内容。

当你选中任意一个控件的时候,在右侧的Properties区域就会出现很多的属性选项,如下图所示。

在这里我们就可以设置当前控件的所有属性,如文本内容、颜色、点击事件等等。这些功能都非常简单,我就不再进行详细介绍,大家自己点一点就会操作了。

需要我们重点掌握的是Properties区域的上半部分,这部分也被称为Inspector。

首先可以看到,在Inspector中有一个纵向的轴和一个横向的轴,这两个轴也是用于确定控件的位置的。我们刚才给Button的上下左右各添加了一个约束,然后Button就能居中显示了,其实就是因为这里纵横轴的值都是50。如果调整了纵横轴的比例,那么Button的位置也会随之改变,如下图所示。

不过,虽然我们将横轴的值拖动到了100,但是Button并没有紧贴到布局的最右侧,这是为什么呢?实际上,Android Studio给控件的每个方向上的约束都默认添加了一个16dp的间距,从Inspector上面也可以明显地看出来这些间距的值。如果这些默认值并不是你想要的,可以直接在Inspector上进行修改,如下图所示:

可以看到,修改成0之后Button右侧的间距就没了。

接下来我们再来学习一下位于Inspector最中间的那个正方形区域,它是用来控制控件大小的。一共有三种模式可选,每种模式都使用了一种不同的符号表示,点击符号即可进行切换。

  • 表示wrap content,这个我们很熟悉了,不需要进行什么解释。

  • 表示固定值,也就是给控件指定了一个固定的长度或者宽度值。

  • 表示any size,它有点类似于match parent,但和match parent并不一样,是属于ConstraintLayout中特有的一种大

《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享

小控制方式,下面我们来重点讲解一下。

首先需要说明,在ConstraintLayout中是有match parent的,只不过用的比较少,因为ConstraintLayout的一大特点就是为了解决布局嵌套,既然没有了布局嵌套,那么match parent也就没有多大意义了。

而any size就是用于在ConstraintLayout中顶替match parent的,先看一下我们怎样使用any size实现和match parent同样的效果吧。比如说我想让Button的宽度充满整个布局,操作如下图所示。

可以看到,我们将Button的宽度指定成any size,它就会自动充满整个布局了。当然还要记得将Button左侧的间距设置成0才行。

那有的朋友可能会问了,这和match parent有什么区别呢?其实最大的区别在于,match parent是用于填充满当前控件的父布局,而any size是用于填充满当前控件的约束规则。举个例子更好理解,如果我们有一个新的Button,它的其中一个约束是添加到当前这个Button上的,那么any size的效果也会发生改变,如下图所示。

通过上图的演示,相信你已经很好地理解any size的作用了。

Guidelines

==========================================================================

现在你已经对ConstraintLayout比较熟悉,并且能使用ConstraintLayout来编写一些简单的界面了。不过目前有一个问题可能还比较头疼,刚才我们已经实现了让一个按钮居中对齐的功能,如果我们想让两个按钮共同居中对齐该怎么实现呢?

其实这个需求很常见,比如说在应用的登录界面,都会有一个登录按钮和一个注册按钮,不管它们是水平居中也好还是垂直居中也好,但肯定都是两个按钮共同居中的。

想要实现这个功能,仅仅用我们刚刚学的那些知识是不够的,这需要用到ConstraintLayout中的一个新的功能,Guidelines。

下面我们还是通过实际操作来学习一下Guidelines的用法吧。比如现在已经向界面中添加了登录和注册这两个按钮,如下图所示。

然后我们希望让这两个按钮在水平方向上居中显示,在垂直方向上都距离底部64dp,那么就需要先添加一个垂直方向上的Guideline,如下图所示。

我来对上图中的操作进行一下解释。首先点击通知栏中的Guidelines图标可以添加一个垂直或水平方向上的Guideline,这里我们需要的是垂直方向上的。而Guideline默认是使用的dp尺,我们需要选中Guideline,并点击一下最上面的箭头图标将它改成百分比尺,然后将垂直方向上的Guideline调整到50%的位置,这样就将准备工作做好了。

接下来我们开始实现让两个按钮在水平方向上居中显示,并距离底部64dp的功能,如下图所示。

可以看到,我们给登录按钮的右边向Guideline添加约束,登录按钮的下面向底部添加约束,并拖动按钮让它距离底部64dp。然后给注册按钮的左边向Guideline添加约束,注册按钮的下面向登录按钮的下面添加约束。这样就实现了让两个按钮在水平方向上居中显示,在垂直方向上都距离底部64dp的功能了。

自动添加约束

======================================================================

不过如果界面中的内容变得复杂起来,给每个控件一个个地添加约束也是一件很繁琐的事情。为此,ConstraintLayout中支持自动添加约束的功能,可以极大程度上简化那些繁琐的操作。

自动添加约束的方式主要有两种,一种叫Autoconnect,一种叫Inference,我们先来看第一种。

想要使用Autoconnect,首先需要在工具栏中将这个功能启用,默认情况下Autoconnect是不启用的,如下图所示。

Autoconnect可以根据我们拖放控件的状态自动判断应该如何添加约束,比如我们将Button放到界面的正中央,那么它的上下左右都会自动地添加上约束,如下图所示。

然后我们在这个Button的下方再放置一个Button,效果如下。

可以看到,只需要将Button拖放到界面上,Autoconnect会判断我们的意图,并自动给控件添加约束。不过Autoconnect是无法保证百分百准确判断出我们的意图的,如果自动添加的约束并不是你想要的话,还可以在任何时候进行手动修改。总之,可以把它当成一个辅助工具,但不能完全靠它去添加控件的约束。

以上是Autoconnect的用法,接下来我们看一下Inference的用法。Inference也是用于自动添加约束的,但它比Autoconnect的功能要更为强大,因为AutoConnect只能给当前操作的控件自动添加约束,而Inference会给当前界面中的所有元素自动添加约束。因而Inference比较适合用来实现复杂度比较高的界面,它可以一键自动生成所有的约束。

下面我们就通过一个例子来演示一下Inference的用法,比如界面上现在有两个TextView,两个EditText,和两个Button,如下图所示。

接下来我们先将各个控件按照界面设计的位置进行摆放,摆放完成之后点击一下工具栏上的Infer Constraints按钮,就能为所有控件自动添加约束了,如下图所示。


现在运行一下程序,最终效果如下图所示:

Androidstudio的约束布局,安卓面试宝典pdf相关推荐

  1. java面试宝典pdf下载_Java面试问答PDF电子书免费下载(250+问题,60页)

    java面试宝典pdf下载 I was getting a lot of emails and comments to create java interview questions and answ ...

  2. Androidstudio的约束布局,最新Android高级面试题汇总

    其实ConstraintLayout属于Android Studio 2.2的新特性,我在去年写<第二行代码>的时候就非常想要将这部分内容加入到新书里面,但是在尝试之后还是放弃了.因为Co ...

  3. 灵魂拷问!一起刷完了这份1307页的安卓面试宝典吧,不吃透都对不起自己

    前言 每个程序员都有一个梦想,那就是进一线互联网公司深造,不要跟我说你不想进去,如果给你一个这样的平台,不管是薪资待遇还是接触的高度来说,对我们程序员来说都是一个机会,我以前有一个同事,就是从阿里出来 ...

  4. iOS BAT面试宝典 PDF

    目录 (1)序言 (2)版本控制 (3) UNIX常用命令 (4) C语言 (5) Objective-C (6) 内存管理 (7) KVO-KVC (8) Block (9) Swift (10) ...

  5. 安卓原生应用开发!一起刷完了这份1307页的安卓面试宝典吧,值得收藏!

    起因 事情是这样的. 4年前毕业那会,呆在公司的短视频项目,做 视频.那会做得比抖音还早,但是由于短视频太烧钱了,项目被公司关掉了.当时需要开发横竖屏直播/异步视频的场景,就研究下了市场上的 app, ...

  6. 安卓面试宝典,一次哔哩哔哩面试经历,安卓系列学习进阶视频

    导语 Android 音视频开发这块目前的确没有比较系统的教程或者书籍,网上的博客文章也都是比较零散的.只能通过一点点的学习和积累把这块的知识串联积累起来. 音视频的开发,往往是比较难的,而这个比较难 ...

  7. Androidstudio的约束布局

    原文地址来之郭霖博客 今天给大家带来2017年的第一篇文章,这里先祝大家新年好. 本篇文章的主题是ConstraintLayout.其实ConstraintLayout是Android Studio ...

  8. 安卓面试宝典,2021最新Android知识体系总结,面试资料分享

    现在的IT行业竞争压力越来越大,尤其是Android开发行业.而很多Android程序员却每天都在重复CRUD,原地徘徊! 今年年初,你就想改变现状,于是在网上刷了大量面试题,强行记下之后,开始参加面 ...

  9. android面试准备中高级简书!一起刷完了这份1307页的安卓面试宝典吧,已拿到offer

    开头 Android开发,假如开始没有任何的开发经验的话, 千万不要着急,不要想着在短时间内就把一个语言学习好, 因为你之前没有任何的学习经验, 在这个过程中需要有耐心地学习完JAVA的基础知识, 然 ...

最新文章

  1. linux查看某个端口是被哪个进程占用的
  2. python3 opencv 输出中文
  3. 优先队列 HDOJ 5437 Alisha's Party
  4. jpa和hibernate_从JPA到Hibernate的旧版和增强型标识符生成器
  5. 【POJ - 1486】Sorting Slides(思维建图,二分图求必须边,关建边,图论)
  6. 学习笔记4-C语言-开关、循环、跳转
  7. MySql增加用户、授权、修改密码等语句
  8. python将一行作为字段_Python 变量代入,指定某一行截取输出字段怎么办?
  9. .html() 与.text() 获取值、取值 区别
  10. q-learning_教计算机如何通过Q-Learning玩Snake
  11. VS清理中间文件bat脚本
  12. chrome插件“京东商品佣金助手”之京东云java web环境搭建(二)
  13. 单溶水箱串级控制计算机控制,单容水箱液位控制系统
  14. 设置下拉菜单的几种方法
  15. 425 Failed to establish connection解决方案
  16. 网络游戏专业术语中英文对照版
  17. 一文搞懂css 2D动画效果
  18. QT窗口嵌入桌面内部(在桌面图标之上):可以实现自定义桌面
  19. 计算机碎片整理,计算机磁盘碎片整理
  20. 第五天 01-ftp服务器使用及arp欺骗获取ftp账号密码

热门文章

  1. 九度OJ——1176树查找
  2. 分享两种培训和一种战略对焦方案
  3. 等了7年!微信电脑版终于有这个重磅功能了
  4. STM32开发指南阅读记录
  5. Redis运维实战之客户端连接
  6. python十六进制转换为字符串_Python 十六进制整数与ASCii编码字符串相互转换方法...
  7. LaTeX的版面设计
  8. python : 时间日期格式化符号
  9. 他曾参与创立两家纳斯达克上市公司,今天来谈谈技术创业
  10. 暑期集训第12次考试总结