Android中约束布局工具栏,约束布局

Android中约束布局工具栏,约束布局约束布局 ContraintLay 是相对布局的升级版 配合最新的布局编辑器 1AndroidStud 从 2 3 版本开始在布局编辑器中支持约束布局 写作本书时 AndroidStudi 3 已经发布 创建界面的默认布局管理器已经变为约束布局 LayoutEditor 约束布局堪称布局神器 完全不需要嵌套布局 只在布局编辑器中拖拖拉拉即可完成非常复杂的界面布局 不过 第一次使用约束

约束布局(ContraintLayout)是相对布局的升级版,配合最新的布局编辑器

1

Android Studio从2.3版本开始在布局编辑器中支持约束布局,写作本书时Android Studio 2.3已经发布,创建界面的默认布局管理器已经变为约束布局。

(Layout Editor),约束布局堪称布局神器,完全不需要嵌套布局,只在布局编辑器中拖拖拉拉即可完成非常复杂的界面布局。不过,第一次使用约束布局,会发现布局编辑器中有很多小图标可能让人困惑,让我们逐步揭开约束布局的神秘面纱。

1 准备工作

首先需要检查一下Android Studio是否支持约束布局。打开SDK Manager,如1所示,确保已经安装了ConstraintLayout For Android和Solver for ConstraintLayout两个支持库。

2ff06992c90232bf456225e85fe339bf.png

图 1: 检查是否安装约束布局支持库

2 基本概念

约束布局的要旨是通过相对位置定位一个控件。如果我们把界面看做一个平面坐标系(原点位于左上角),控件看做坐标系中的一个点,则坐标(x, y)即可以唯一定位到这个点,如2所示。

也就是说,在约束布局中,我们至少要设置两个“约束”才能唯一定位一个控件:横向距离参照物的间隔x和纵向距离参照物的间隔y。考虑在界面安放第一个控件的情形,则参照物分别为界面的左边界和上边界,即我们安放第一个控件时,至少要设置这个控件距离上边界多远和距离左边界多远。如果不设置横向间距x,则控件默认靠最左边停靠;如果不设置纵向间距y,则控件默认靠左上边停靠;可以想象到,如果两个方向的间距都不设置,则控件就跑到最左上角了。如果多个控件都没有设置两个方向的间距,那么这些控件就都挤在左上角了。

4369e5428c6cced9a4f4d653056ea61d.png

图 2: 平面坐标系中的点

Android Studio的布局编辑器提供了方便和直观的工具帮助我们快速设置约束条件。我们以按钮为例,如3所示,每一个控件在布局编辑器中均提供了以下的手柄或者按钮可供操作:

约束手柄

在控件的四个方向都提供了约束手柄,这是约束布局中最重要的操作手柄,拖动约束手柄到“参照物”(比如边界或者其他控件的约束手柄)即可创建相应方向的约束关系。

调整手柄

用于调整控件的大小。参见8,并不建议直接拖动调整手柄来调整控件的大小。

文字基线设置手柄

用来设置文字按照基线对齐,只有在文字相关控件中才有效。

删除约束按钮

点击可删除该控件的所有约束。如果要删除单个约束,单击相应的约束手柄即可。

50ae5446f308188b1877c32ac2e8d63f.png

图 3: 控件的各种手柄

3 第一个控件:设置横向约束和纵向约束

有了以上的基础知识,现在我们尝试拖动一个按钮到编辑区,并分别拖动约束手柄到左边界和上边界建立这个按钮的横向和纵向约束,如4所示,按钮距离左边界171dp,距离上边界63dp。设置了横向和纵向约束后,仍然可以拖动控件直观的修改约束值。

请尝试运行程序,查看按钮是否在我们期望的位置显示出来?

请尝试单击删除横向约束或者纵向约束,甚至删除所有约束,运行一下看看结果有什么不同?

在布局编辑器,甚至蓝图中看到的控件位置,未必就是控件的真实位置:如果控件的约束不完整,即如果缺少了横向或者纵向的约束,则控件在布局编辑器中的位置仅表示“设计位置”(用来表明设计意图),真实位置和缺失的约束有关:如果缺失横向约束,则控件停靠左边;如果缺失纵向约束,则控件停靠上边。因此,如果发现控件的真实位置和设计位置不相符,应该仔细检查控件是否缺少了必备的横向和纵向约束。

a0e0bf68fa15eaa379e91606d5e322ea.png

图 4: 建立控件的横向和纵向约束

4 第一个控件:设置水平居中

现在,我们尝试让第一个控件水平居中。方法很简单,分别拖放按钮左右两边的约束手柄到边界,按钮就自动水平居中了,如5所示。。布局编辑器很智能的猜测我们设置水平方向的两个约束,最大的可能性就是为了让控件水平居中,不是吗?注意到,在1中,按钮左边距离边界的水平间距是使用绝对数字表示的,而在5中,按钮水平方向的间距形象的使用了“弹簧线”,表示可伸缩的长度,即水平间距随按钮的长度而变化,详情可参见5。另外,在弹簧线的两端还有一个数字“8”,这是margin的默认设置, 我们将在subsec:布局编辑器的工具栏详细介绍默认margin的设置方法。

e7bdfd14113fc72d2885d0a85f7bdd16.png

图 5: 控件水平居中

同样的道理,拖放按钮上下两边的约束到边界,按钮会自动垂直居中。

5 第一个控件:使用观察器调整控件

当选中一个控件时,在布局编辑器的右上角是该控件的“观察器”(inspector),通过观察器可以方便的调整控件的wrap属性和bias属性以及margin设置。首先看一下wrap属性的调整方法,如6所示。

2929af47ccfe35ebee4c47eb01148533.png

Sub-图 a: wrap-content情形

5842d11596c2eb1c5287f7e088ea2065.png

Sub-图 b: fixed固定宽度情形

9a981a5d135014e7ec98befd9b50550c.png

Sub-图 c: wrap-constraint情形

图 6: 在观察器中调整控件的wrap属性

具体操作方式为,单击靠近操作手柄的弹簧线等可以在wrap-content(默认值)、fixed、match constraints三种wrap方式之间切换:

38b73ca78cebda57333633490c94ec8f.png

wrap-content模式,即控件只占用尽量小的空间。

9aec95e756524418571532e3d41f0985.png

fixed模式,即控件的横向尺寸是固定值。

771052cecda356579e3f0ab8cd2bda11.png

match-constraints模式,即控件根据约束条件尽量占有最大的空间,这和wrap-content是相反的含义。

bias属性的调整很直观,直接拖动滑动条即可,同时可以在设计器和蓝图中看到拖动的效果。当然改变控件的位置也可以直接在设计器界面拖动控件,但是通过拖动滑动条调整bias属性的好处是可以方便的单独调整一个方向的bias属性,不会无意中修改了另外一个方向的bias属性。

margin属性的设置也很直观,直接点击图中的数字即可输入新的margin值,或者从下拉菜单中选择,不再赘述。

观察器的操作方式比较多,建议读者每次调整参数后,不仅仅通过蓝图或者设计器观察调整的效果,也通过模拟器运行app观察真实的运行效果,加深对观察器操作方式和效果的了解。

6 安放第二个控件

当我们在布局编辑器中安放好第一个控件后,安放第二个控件的策略就很明确了,此时存在两个参照物:第一个已经安放好的控件和整个屏幕。我们以第一个控件作为参照物为例,一般有如下的布局方法:

横向对齐

以横向顶部对齐为例,将两个控件顶部的两个约束手柄连接起来就可以了。同样的道理,也可以实现横行底部对齐和横向交叉对齐,如图7所示。当然,不要忘记了设置控件之间的横向间隔距离。此时,如果拖动第一个控件,会发现第二个控件也会随之移动.请认真体会横向对齐设置后,移动第二个控件时似乎会碰到“一堵墙”,这就是横向对齐的效果。

94033facf40c435a700fe169b3077ab3.png

Sub-图 a: 横向顶部对齐

bc3f0f380c1403307de7e630ec5c958a.png

Sub-图 b: 横向底部对齐

6293db286bbf9c990f48523d9d1dfd40.png

Sub-图 c: 横向交叉对齐

图 7: 利用约束手柄横向对齐

纵向对齐

纵向对齐的思路和横向对齐非常类似,只要把两个控件左右两边的约束手柄连接起来,两个控件就构成了纵向对齐,分为纵向左对齐、纵向右对齐和纵向交叉三种形式,不再赘述。

7 安放一组控件

如果要在水平方向均匀放置一组控件,约束布局怎么做呢?布局编辑器依然提供了非常人性化的操作模式,比如三个按钮的水平平均布局见8,操作步骤如下:

拖放三个按钮到编辑区。

设置中间按钮到上边界的间距为合适的值。

分别将左右两边按钮的顶部约束手柄和中间按钮的顶部约束手柄连接起来,这样三个按钮在水平方向就顶部对齐了。

同时选择三个按钮,点击鼠标右键并选择“Center Horizentally”菜单项,即实现了三个按钮横向均匀分布。点击8中

f12b64781a1d1592a7330ad60b75eae3.png

图标,可以在三种平均分布模式之间切换,请读者自行体会其中的差别。

f33bf974352444f5c58f43107a0cb84f.png

图 8: 水平均匀安放三个按钮

纵向平均安放一组控件的方法于此类似,不再赘述。

8 改变控件的大小

约束布局中允许任意设置控件的大小,在布局编辑器中也提供了调整手柄用于设置控件大小,但是一般不要通过直接操作调整手柄来设置控件的绝对尺寸,建议通过如6中所述的方法设置控件的相对尺寸。

9 约束布局的局限性

约束布局很方便,能够减少界面设计的嵌套层次,大幅度降低界面设计的复杂度。但是,约束布局对于超过一屏的超长页面并不合适,至少目前的布局编辑器无法很好的支持超长页面的设计。

d4c39bd54dfbfe627dbd9fe226767b2c.png

0

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/203137.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午10:30
下一篇 2026年3月19日 下午10:30


相关推荐

  • html 简单表格代码「建议收藏」

    html 简单表格代码「建议收藏」<!DOCTYPEhtml><html> <head> <title></title> </head> <body> <tablestyle="withd:600px"border="1"> <capti

    2022年8月11日
    11
  • CentOS7_装机软件推荐

    CentOS7_装机软件推荐

    2021年9月12日
    65
  • Visual Studio Code 入门教程

    Visual Studio Code 入门教程一 入门教程 1 1 简介 VisualStudio 简称 VSCode 它是一款由微软开发且跨平台的轻量级但功能强大的免费源代码编辑器 该软件支持语法高亮 代码自动补全 代码重构 查看定义功能 并且内置了命令行工具和 Git 版本控制系统 用户可以更改主题和键盘快捷方式实现个性化设置 也可以通过内置的扩展程序商店安装扩展以拓展软件功能 VisualStudio 默认支持非常多的编程语言 包括 JavaScript TypeScript CSS 和 HTML 也

    2026年3月19日
    2
  • 基于支持向量机的手写数字识别详解(MATLAB GUI代码,提供手写板)

    基于支持向量机的手写数字识别详解(MATLAB GUI代码,提供手写板)摘要:本文详细介绍如何利用MATLAB实现手写数字的识别,其中特征提取过程采用方向梯度直方图(HOG)特征,分类过程采用性能优异的支持向量机(SVM)算法,训练测试数据集为学术及工程上常用的MNIST手写数字数据集,博主为SVM设置了合适的核函数,最终的测试准确率达99%的较高水平。根据训练得到的模型,利用MATLABGUI工具设计了可以手写输入或读取图片进行识别的系统界面,同时可视化图片处理过程及识别结果。本套代码集成了众多机器学习的基础技术,适用性极强(用户可修改图片文件夹实现自定义数据集训练)。

    2022年6月10日
    30
  • Python实现“EMD\EEMD\VMD+Hilbert时频图”与“CWT小波时频图”

    Python实现“EMD\EEMD\VMD+Hilbert时频图”与“CWT小波时频图”Python实现“EMD\EEMD\VMD+Hilbert时频图”与“CWT小波时频图”  信号处理中常需要分析时域统计量、频率成分,但不平稳信号的时域波形往往复杂、无序,且傅里叶变换得到的频率成分是该时间段内的平均频率,无法分析频率随时间变化的情况。随后,短时傅里叶变换(STFT)、小波变换(WT)、希尔伯特变换(HHT)等时频分析方法相继而出。  其中,STFT受时间窗口的影响、WT则需要自己选择小波、HHT在变换时需要预先将信号分解为平稳信号。由于网上只有CWT小波时频图的python代码,笔者自

    2025年6月14日
    4
  • IntelliJ IDEA中怎么全局搜索替换(整个项目)(Eclipse)

    IntelliJ IDEA中怎么全局搜索替换(整个项目)(Eclipse)IntelliJIDEA使用教程(总目录篇)我们用Eclipse或者IntelliJIDEA编程,有时候需要将整个项目的某个字符串替换成其他的。全局搜索我会,我还给调成ctrl+g了呢,但是遇到要全局(整个项目)替换字符串。哎哟,我有点蒙了。这不换了编辑器吗。我用的是eclipse的keymap而且电脑又不是mac。那么问题来啦。怎么找快捷键呢。如下;额,顺便说下…

    2025年6月9日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号