Android ConstraintLayout使用指南

Android ConstraintLayout布局使用详解 Android ConstraintLayout是谷歌推出替代PrecentLayout的组件。支持相对布局、线性布局、帧布局,笔者看来更像是FrameLayout 、LinearLayout、RelativeLayout三者的结合体,并且比这三者更强大的是实现了百分比布局,大家都知道安卓碎片严重,使用百分比适配,那么将彻底解决适配问题。 本文将教会你如何使用此控件。 一、当作Relative... 阅读详情

升级Android Studio 2.3之后,IDE默认生成的Activity布局都是以ConstraintLayout做为根布局,体验了一把这个Google去年就开始力推的ConstraintLayout后,觉得非常不错,本文用于记录ConstraintLayout各个方面的使用知识。

平台支持

  • ConstraintLayout最低兼容Android 2.3;
  • 目前Android Studio 2.3默认使用ConstraintLayout作为布局文件的根布局;
  • 想要使用ConstraintLayout,需在项目的build.gradle添加com.android.support.constraint:constraint-layout:XXX版本号依赖;

基础使用

ConstraintLayout翻译成中文也称为约束布局,在整个使用体验过程中真的是贯穿约束二字,这一节先来介绍一些基础使用,后面你就会慢慢感受到约束布局的魅力。创建完工程后打开布局文件,底部切换Design的Tab上,可以看到整个操作界面

左上角的面板是放置了系统内置各种各样的控件,想要布局直接拖到到布局文件中即可(所见即所得),右边的面板是选中布局文件中的控件时期各种各样的空间属性,ConstraintLayout最大的好处在于让我们通过拖控件的形式进行布局,并且不用担心适配问题。所以,先来拖个控件试试看,将一个Button拖动到屏幕正中央,然后运行显示看看效果。

模拟器运行后的效果

而实际运行后却发现,这个Button还是位于屏幕左上角,说好的居中效果呢?这里就要开始引入ConstraintLayout的约束概念,我们切换回去看xml的布局代码,发现了两个问题。第一,布局预览时能够看到显示居中的Button,是因为控件属性设置中引用了两个tools命名空间下的属性。

我们都知道,这两个属性只在布局编辑器的预览中有效,实际运行效果是不生效的。第二,Button标签下有红色波浪线警告,我们把鼠标移到对应位置会发现警告内容,告诉我们Button没有任何约束设置,当前效果只支持预览,实际运行后会返回到左上角去,同时提示我们应该给控件添加约束。

如何增加约束?回到Design页面,对着控件上下左右四个原点拖动添加对应的约束即可

成功添加约束后,即可得到正常的运行效果了。

实际操作不一定要在Tab,也可以直接在Text页面拖动控件添加约束

成功实现添加约束后,可以看到Button多了下面几个属性设置

app:layout_constraintBottom_toBottomOf=”parent” 意思是Button底部的布局约束是位于parent的底部,parent是指包裹着它的ConstraintLayout,也可以设置指定某个控件的id,其他类似的属性就不再赘述,以上四个约束联合起来便实现了Button的居中,ConstraintLayout总共有下面这些同类的属性

你会发现ConstraintLayout非常灵活的把RelativeLayout的活给干了,关于left、right、top、bottom、start、end、baseline的基准可以参照下图

relative-positioning-constraints

如果我想加多一个Button2并且将其放置到原先居中Button的右方并且与其底部对齐,只需如下操作即可

并且你也可以发现,Button2依赖与Button后会随着Button的移动而跟着发生相对移动,目的是了保证我设置的依赖,时刻保持Button2就在Button的右边,并且底部对齐。你也可以看到布局文件中也为Button2添加了如下两个属性

如果你已经理解上面提到的属性含义,这里应该不会有疑惑。

介绍完上下左右的依赖设置后,下面介绍一些Margin属性,除了Android常见的各种android:layout_marginXXX外,ConstraintLayout自行添加了如下属性

这些设置生效于当依赖的约束对象被设置visibility为gone时,非常简单,读者自行设置实践对比即可,这里就不展示效果了。

聊完Margin后,再来介绍一下Bias,ConstraintLayout新增了如下两个属性用于控制控件在水平和垂直方向在屏幕上的偏移比例

当为目标控件设置好横纵向的约束时(app:layout_constraintLeft_toLeftOf=”parent”、app:layout_constraintRight_toRightOf=”parent”或者app:layout_constraintTop_toTopOf=”parent”、app:layout_constraintBottom_toBottomOf=”parent”),这个两个属性才会生效。实际操作过程中,你会发现对着设置好横纵向约束的Button进行拖动,布局中的layout_constraintHorizontal_bias和layout_constraintVertical_bias会一直发生相应的变化,如果你需要Button居中,那么直接将这两个属性的参数值设置为0.5即可。

关于ConstraintLayout的基本使用,这一节就介绍到这里。

进阶使用

看完基本使用,再来学习一些进阶技巧,这里先补充一个关于ConstraintLayout的知识点,与其他Layout不同之处在于,它的layout_width和layout_height不支持设置match_parent,其属性取值只有以下三种情况:

  • wrap_content;
  • 指定具体dp值;
  • 0dp(match_constraint),代表填充约束之意,注意不要以为和match_parent是一样的;

想想如果没有ConstraintLayout,我们要让一个控件的宽高按某个比例进行布局应该怎么做?有了ConstraintLayout后,我们可以使用layout_constraintDimentionRatio属性设置宽高比例,前提是目标控件的layout_width和layout_height至少有一个设置为0dp,如下让一个ImageView宽高按照2:1的比例显示

layout_constraintDimentionRatio默认参数比例是指宽:高,变成高:宽可以设app:layout_constraintDimensionRatio=”H,2:1”。

ConstraintLayout的链条(Chains)特性非常强大,在没有ConstraintLayout之前,线性布局我们主要都依靠LinearLayout来完成,有了ConstraintLayout之后,它把LinearLayout的活也干了,例如要把按钮水平排成一行,可以这样操作

这样ButtonA、B、C就在水平方向形成了一条Chain,并且底部对齐。回去看xml文件,会见到ButtonA新增app:layout_constraintHorizontal_chainStyle的属性设置,这个属性在一条Chain中只会出现在第一个控件中,这个控件是整条Chain的Head。

除了水平方向的layout_constraintHorizontal_chainStyle外还有垂直方向的layout_constraintVertical_chainStyle,两者均有spread,spread_inside,packed这三种取值,如果将控件的layout_width和layout_height设置成为0dp,还可以配合layout_constraintHorizontal_weight、layout_constraintVertical_weight两个属性实现和LinearLayout中设置layout_weight相同的效果,具体的操作这里就不再展示了,下面一张图告诉你Chain的强大之处。

关于Chain的就介绍到此,进阶的最后一部分再介绍一下Guideline功能,如果我们需要对着屏幕的中轴线进行布局,就可以使用到Guideline进行操作,例如下面两个Button分别分布在中轴线的左右两侧

从操作上我们可以看到Guideline也分为垂直和水平两种,并且支持设置在屏幕中所处的位置,可以使用layout_constraintGuide_begin和layout_constraintGuide_end设置具体dp值,也可以使用layout_constraintGuide_percent来设置比例。实际上它也只是一个辅助我们布局的View而已,其源码内部实现也非常简单,并且默认设置了visibility为gone,关于ConstraintLayout的进阶使用便介绍到这里。

使用优势

关于ConstraintLayout的使用优势,我个人体验总结如下:

  • 高效布局,Android这么多年以来真正意义上的实现了所见即所得的拖曳方式布局,极大的提高开发效率;
  • 轻松灵活的实现复杂的布局;
  • 解决多重布局嵌套问题,通过前面介绍你会发现ConstraintLayout真的是非常灵活,可以很大程度的避免Layout之间的嵌套;
  • 满足屏幕适配的需求,想想没有ConstraintLayout之前的拖曳式布局,你就知道有多恶心;

最佳实践

ConstraintLayout最开始出来就有很多开发者盼着完全依赖于拖曳方式实现布局,而在实际操作过程中,完全通过拖曳其实效率反倒是会打折扣,在此建议是拖曳方式和xml编码相结合才是最佳实践的方式。

本文为技术视界原创作品,转载请注明原文出处:http://blog.coderclock.com/2017/04/09/android/android-constraintlayout ,欢迎关注我的微信公众号:技术视界

导入项目出现:Could not find com.android.support.constraint:constraint-layout:2.0.0-alpha8的解决方法 今天在使用Android Studio导入一个别人的项目时,出现以下错误: Gradle 同步时报错,Could not find com.android.support.constraint:constraint-layout:2.0.0-alpha8的解决方法。 原因:Android Studio未安装ConstraintLayout的支持包。 解决方法: 点击Sdk Manage 阅读详情

相关推荐

Android ConstraintLayout 基础

首先,在 Android 项目的布局 XML 文件中,将根布局设置为。

嗯... 2354

Android ConstraintLayout 约束布局的使用

目前Android的默认布局早已改成ConstraintLayout,但是很多小伙伴还是使用过去的相对布局,觉得老的布局用起来熟悉,新布局使用复杂,从而失去了探索新大陆的机会,今天就让我们一起揭开ConstraintLayout的面纱,掌握Android新布局的使用方法。传统的布局容易在版本迭代过程中,造成页面层级过多的问题(俄罗斯套娃),一是对页面渲染有影响,二是不利于开发者的后期维护。

weixin_42604414的博客 4083

Android ConstraintLayout 约束布局的使用手册

目前Android的默认布局早已改成ConstraintLayout,但是很多小伙伴还是使用过去的相对布局,觉得老的布局用起来熟悉,新布局使用复杂,从而失去了探索新大陆的机会,今天就让我们一起揭开ConstraintLayout的面纱,掌握Android新布局的使用方法。传统的布局容易在版本迭代过程中,造成页面层级过多的问题(俄罗斯套娃),一是对页面渲染有影响,二是不利于开发者的后期维护。

yzwfeng的专栏 3105

Android 约束布局(ConstraintLayout)详解

前言 约束概述 转换布局 开始 创建布局 添加约束 基线约束 Chains Properties 设置宽高比例 Guidelines 自动添加约束 参考 本篇 ConstraintLayout 讲解版本:1.0.2,1.1.x 版本开始新增功能在下篇进行讲解。 前言 ConstraintLayout 是一个 ViewGroup,它的出现是为了解决复杂布局时,布局嵌套(

Airsaid 4万+

Android ConstraintLayout的常见用法

ConstraintLayout 是 Android 中功能强大的扁平化布局容器,主要通过设置控件之间的来定位和确定大小。

yeziyfx的专栏 1122

13、Android ConstraintLayout 使用指南

本文详细介绍了 Android 中 ConstraintLayout 的使用方法及其优势,包括基础特性如解决视图重叠问题、Flow 辅助器和比率设置等。同时讲解了 ConstraintLayout 的灵活性、适配不同屏幕尺寸的能力以及与 Android Studio 的集成。还涵盖了在 Layout Editor 工具中建立约束的方式、调整偏差、边距配置以及小部件尺寸的设置等内容,是 Android 开发者设计高效、响应式用户界面的实用指南。

84

Android约束布局ConstraintLayout的使用

Android约束布局ConstraintLayout的基本使用 约束布局ConstraintLayout面世已有很长一段时间了,但我一直没有关注这个Android 中继五大布局后的新布局的使用。近日在网友的讨论的强烈推荐下,尝试了ConstraintLayout。使用之后的最大感触就是:为什么我不早点在项目中尝试ConstraintLayout!!! 本篇文章,旨在记录ConstraintLay...

qq_36046305的博客 2万+

Win10无外网热点搭建全指南:纯局域网通信与设备互联

热点并不是只有共享上网一种用途。在很多工程与办公场景中,我们需要的是让手机、笔记本、开发板等设备临时组成一个纯内网,完成文件传输、端口调试或局域网联机,而不需要任何外网出口。Win10笔记本在不连接互联网的状态下,借助系统移动热点或netsh承载网络,完全可以创建一个无外网热点,实现设备间二层互通。其核心在于利用SoftAP建立虚拟无线接入点,并绕开或禁用ICS的NAT转发。掌握这一技术,可在会议、出差、物联网调试等场景中快速搭建临时局域网,无需额外路由器。本文详细梳理三种实现路径、操作步骤及常见故障排查,

weixin_29230773的博客 238

安卓ConstraintLayout概述与应用分析

ConstraintLayout是Android平台中的一种高级布局容器,它革命性地改变了用户界面(UI)的设计与实现方式。作为Android SDK的一部分,特别是在Android Studio集成开发环境中的强力支持下,它使得开发者能以更加直观、高效的方式组织界面元素,从而实现复杂而灵活的布局设计。ConstraintLayout通过约束系统替代了传统的嵌套布局,显著减少了视图层级,提升了应用性能,并简化了多屏幕尺寸和方向的适配过程。

wlred1980的博客 571

毕业论文管理系统的设计与实现

毕业论文工作是高等学校本科培养阶段的一个重要环节。目前论文管理工作存在着许多问题,例如人工管理极为不便;学生对论文所要撰写的内容并不十分了解,与指导老师的沟通非常不便;老师的指导监督也很难完全到位;手工评审的效率低等。而现有的一些毕业论文信息管理或答辩评审系统只是实现了部分网上交流和评审管理的功能,在答辩评审的自测和项目指标权重等方面都存在着一定的不足。因此,本文设计的毕业论文管理系统采用B/S模式开发。其中,Browser层使用JSP技术开发;

wqq_992250277的博客 3182

MYSQL、ORACLE、PostgreSQL数据库对象层次及权限管理对比

本文为出于自己扩展、比较、图形化的思维路径自行总结归纳,可能有些细节不太准确,欢迎指正。MySQL、Oracle、PostgreSQL关系型数据库都有管理员用户、用户、权限管理、表函数索引等数据库对象,schema。但在数据库对象隶属层次上有差异和相同的地方。

rachel_2016的博客 1490

Android约束布局ConstraintLayout,安卓binder机制

那么接下来就是添加约束了:(设置参照物) (通过四个点来确定其布局)首先来个最简单的,上下左右都拉一次。 然后就不爆红了,这就是最基础的使用了(这时通过鼠标可以直接移动控件的位置),下面通过一个小Demo,来拓展一下 layout_constraintStart_toEndOf :同left_toRightOf layout_constraintStart_toStartOf :同left_toLeftOf layout_constraintEnd_toStartOf :同right_toLeftOf

m0_66264569的博客 498

UWB定位原理详细介绍

Hello大家好我是小智,今天我来给大家介绍下超宽带的定位原理,首先我们来讲下什么是UWB技术。 超宽带(Ultra Wide Band)简称UWB,和我们熟悉的WIFI、蓝牙技术一样属于通信技术的一种,UWB是一种无线载波通信技术,它不采用正弦载波,而是利用纳秒级的非正弦波窄脉冲传输数据,其所占的频谱范围很宽,右图是一种典型的正弦载波信号图。 UWB这种技术有什么特点呢? UWB系统结构实现简单;2.具有高速的数据传输能力;3.功耗低;4.安全性高;5.多径分辨能力强;6.可用于精确定位等特点。 UWB.

qq_35699674的博客 2万+

Android ConstraintLayout 约束布局详解

在2016年的GoogleI/O大会上,Google发布了预览版,同时也发布了Android新的布局方案,但是最近的一年也没有大规模的使用。2017年Google发布了正式版,在版本中新建的Module中默认的布局就是。

赵彦军 7万+

Jetson Nano 【1】入手开箱、烧系统

类似于半开箱哈哈 怀着小期待的心情,屁颠屁颠跑到村口领快递,拿到了这个香喷喷的Jetson Nano 开发板 开箱: 由于太激动了忘记拍点啥,于是在最后留了张全家福 板子的结构: 我觉得这个有必要记录一下,于是去官方文档拿了张图来:官方文档传送 1=SD card 的卡槽,位于第二层板子的背部,也就是大风扇屁股位置 2=40针扩展接头(还没开用) 3=USB的供电口,根据大佬测试(某哩...

椰子奶糖的博客 4194

一文弄懂Word2Vec之skip-gram(含详细代码)

目录 前言 一、什么是Skip-gram算法 二、目标是什么 三、定义表示法 3.1 one-hot向量 3.2 词向量(word vector) 3.3 单词矩阵 3.4 单词相似度 3.5 softmax函数 3.6算法过程 3.7 求softmax 四、skipgram代码实现 4.1 如何把词转换为向量 4.2 CBOW和Skip-gram的算法实现 Skip-gram的理想实现 Skip-gram的实际实现 4.3 使用Pytorch实现Skip-gram .

Python,数据分析,机器学习,深度学习 1万+

Android ConstraintLayout 使用详解

ConstraintLayout(约束布局)是 Android Studio 2.2 引入的一种新型布局,现已成为 Android 开发中最强大、最灵活的布局管理器之一。它结合了 RelativeLayout 的相对定位和 LinearLayout 的线性布局优势,能够通过设置控件之间的相对约束关系来构建复杂的界面。ConstraintLayout 是 Android 开发中非常强大的布局工具,它不仅可以减少布局嵌套提高性能,还能轻松实现复杂的布局设计。

专注于移动开发的干货分享。提供高效解决方案、避坑指南与前沿技术解析。为开发者创造价值。 981

飞牛fnNAS免费内网穿透之zerotier篇

本文介绍了如何通过ZeroTier实现飞牛NAS的远程文件共享。首先,用户需要在ZeroTier官网注册账号并创建虚拟局域网。接着,分别在Windows和飞牛NAS上安装ZeroTier客户端,并通过SSH登录飞牛NAS进行配置。安装完成后,用户可以在ZeroTier页面中授权设备加入虚拟局域网。最后,通过Windows的“网上邻居”功能访问飞牛NAS的共享文件夹,实现跨局域网的文件共享。这种方法不仅适用于文件共享,还可以用于打印机共享和远程桌面连接。

dgnankai的专栏 2465

优化Android 布局 —— ConstraintLayout

来来来 一起使用 ConstraintLayout 好吧按照惯例 先来“吹一波” ConstraintLayout 的性能优势 减少嵌套 ,尽可能的保持 扁平的的视图结构 如下图: 使用 ConstraintLayout 和 RelativeLayout 的对比 ConstraintLayout 在测量/布局阶段的性能比 RelativeLayout大约高 40%: 可以实现 拖拽绘制...

章鱼哥的博客 441

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

2024年安卓最全Android ConstraintLayout 约束布局,阿里hr面试问题

我这里整理了一份完整的学习思维以及Android开发知识大全PDF。当然实践出真知,即使有了学习线路也要注重实践,学习过的内容只有结合实操才算是真正的掌握。

2401_84561736的博客 1114

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Android ConstraintLayout 约束布局

dependencies {implementation ‘com.android.support.constraint:constraint-layout:1.0.2’}然后layout的根布局使用:layout_constraintLeft_toLeftOflayout_constraintLeft_toRightOflay

2401_89191669的博客 993

Android详解——ConstraintLayout约束布局

ConstraintLayout继承自ViewGroup,允许用户以更加灵活的方式在布局中设置控件的位置和尺寸(ConstraintLayout在API>9可用)。ConstraintLayout采用方向约束的方式对控件进行定位,至少要保证水平和垂直方向都至少有一个约束才能确定控件的位置。相对位置边距中心位置圆形位置可见性尺寸约束链式布局虚拟辅助控件优化器记住,依赖关系中不能有循环依赖关系。

闲暇部落 5364

Android 的 ConstraintLayout 布局使用

加依赖:确保里有。定根布局:根标签用。放视图:把ButtonTextView等放进去。添约束(最关键!:为每个视图的水平方向和垂直方向至少各加一个约束。水平方向:约束Start或End。垂直方向:约束Top或Bottom。常用目标parent(父布局)或其他视图的id。打开 Android Studio 的布局编辑器,直接拖拽控件,观察它自动生成的约束代码,这是最快的学习途径!场景推荐选择理由新项目开发性能好、功能强、现代标准复杂界面减少嵌套、响应式支持好简单相对定位代码更简洁直观。

m0_61945436的博客 1291

Android约束布局ConstraintLayout

layout_constraintRight_toRightOf :当前View的右侧和另一个View的右侧位置对齐。layout_constraintLeft_toLeftOf :当前View的左侧和另一个View的左侧位置对齐。layout_constraintLeft_toRightOf :当前view的左侧会在另一个View的右侧位置。layout_constraintRight_toLeftOf :当前view的右侧会在另一个View的左侧位置。2.为什么要用ConstraintLayout。

2501_90257224的博客 1105
上一篇: 利用Android源码,轻松实现汉字转拼音功能
下一篇: 为什么ContentResolver调用bulkInsert批量插入数据失败
D_clock爱吃葱花
博客等级 码龄14年 163粉丝 13原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值