Android ConstraintLayout使用进阶

Android :ConstraintLayout 偏移 ( Bias ) 计算方式详解 ConstraintLayout Bias 1、Bias 定义,水平偏移和垂直偏移2、使用参考 1、Bias 定义,水平偏移和垂直偏移 注意前提 : 该属性生效的前提是 , 必须设置水平方向上的两个约束 ; Left ( 或 Start ) 约束 和 Right ( 或 End ) 约束都必须设置 ; 2、使用 参考 1、https://hanshuliang.blog.youkuaiyun.com/article/details/97102389?spm=1001.2101.3001.6650.5&utm 阅读详情

前言

曾经Android有五大布局,LinearLayout、FrameLayout、TableLayout、RelativeLayout和AbsoluteLayout,那会我们比较常用的布局就两三个,写xml的时候根据界面灵活选择布局,但是往往会面临布局嵌套过深的问题,阅读也不方便。随着Android生态的发展,Google后来推出了新的布局——ConstraintLayout(约束布局)。
我很快去学习并将其用在项目中,刚开始的时候觉得比较抽象难懂,各种不适应;一段时间过后,这玩意儿真香!
本文不讲ConstraintLayout基本使用(网上资料很多),而是关于使用ConstraintLayout的进阶。

导入依赖:(2.x版本)

implementation 'androidx.constraintlayout:constraintlayout:2.0.2'

进阶1

在开发中可能需要实现如下效果:
在这里插入图片描述
长文本
文本外层有背景,短文本的时候宽度自适应,长文本超过屏幕的时候,背景贴右边,文字显示…,这样的UI需求很常见,我们来一步步拆解。
1、文本背景需要占满屏幕,并且文本显示…

<TextView
      android:layout_width="0dp"
      android:ellipsize="end"
      android:maxLines="1"
      android:singleLine="true"
      android:background="@drawable/xxx"
      app:layout_constraintEnd_toEndOf="parent"
      app:layout_constraintStart_toStartOf="parent"
      />

2、这时候TextView会水平居中,我们需要添加

app:layout_constraintHorizontal_bias="0"

layout_constraintHorizontal_bias表示水平偏移,即“当组件左侧和右侧 ( 或者 开始 和 结束 ) 两边被约束后, 两个联系之间的比例”,取值为0-1,具体看ConstraintLayout 偏移 ( Bias ) 计算方式详解,我们只需要将水平偏移量设置为0,控件就会被约束在左侧了。
3、最后一步,短文本的时候宽度自适应,长文本的时候占满屏幕,需要添加

app:layout_constraintWidth_max="wrap"

layout_constraintWidth_max表示指定视图的最大宽度,取值为“wrap”,它和“wrap_content”不同,虽然都是适应内容,但仍然允许视图比约束要求的视图更小。
最终代码:

<TextView
      android:layout_width="0dp"
      android:layout_height="wrap_content"
      android:background="@drawable/xxx"
      android:ellipsize="end"
      android:maxLines="1"
      android:singleLine="true"
      app:layout_constraintEnd_toEndOf="parent"
      app:layout_constraintHorizontal_bias="0"
      app:layout_constraintStart_toStartOf="parent"
      app:layout_constraintWidth_max="wrap"
      tools:text="这是一个测试文案"
      />

进阶2

再来看个效果图:
在这里插入图片描述
在这里插入图片描述
还是文本适配的问题,短昵称的时候自适应,长昵称的时候,性别图标跟随文本长度移动,但是图标必须在“聊天”按钮左侧,文本显示…
我们再来一步步拆解(仅针对昵称Textview):
一、重复上面的步骤1和步骤2,代码如下(注意layout_width=“wrap_content”,上面的是0dp)

<TextView
        android:id="@+id/tv_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="我是昵称"
        android:singleLine="true"
        android:ellipsize="end"
        android:maxLines="1"
        app:layout_constraintHorizontal_bias="0"
        app:layout_constraintStart_toEndOf="@id/iv_head"
        app:layout_constraintEnd_toStartOf="@id/iv_gender"
/>

二、这时候我们会发现布局是居中的,而且昵称TextView都需要收尾元素相连,我们可以使用layout_constraintHorizontal_chainStyle改变整条链的约束状态,它有三个值,分别是spread、spread_inside和packed,其中packed表示将所有 Views 打包到一起不分配多余的间隙(当然不包括通过 margin 设置多个 Views 之间的间隙),然后将整个组件组在可用的剩余位置居中(可以查看Chains链布局),同时由于layout_constraintHorizontal_bias="0"的作用,布局将会向左侧偏移。

app:layout_constraintHorizontal_chainStyle="packed"

三、最后,当我们输入文本时,发现文本并没有约束到“聊天”按钮左侧,因为layout_width=“wrap_content”,添加的约束是不起作用的,所以需要强制约束

 app:layout_constrainedWidth="true"

代码动态改变约束

初始约束:
在这里插入图片描述
修改后的约束:
在这里插入图片描述
如上图,初始状态,中间按钮约束在按钮1右侧,某个条件下需要将中间按钮约束在按钮2左侧,这种时候,我们就需要在代码动态设置约束了。
具体代码:

constraintLayout?.let {
			//初始化一个ConstraintSet
            val set = ConstraintSet()
            //将原布局复制一份
            set.clone(it)
            //分别将“中间按钮”START方向和BOTTOM方向的约束清除
            set.clear(“中间按钮”, ConstraintSet.START)
            set.clear(“中间按钮”, ConstraintSet.BOTTOM)
            //重新建立新的约束
            //“中间按钮”的END约束“按钮2”控件的START
            //相当于 app:layout_constraintEnd_toStartOf="@id/按钮2"
            set.connect(
                “中间按钮”,
                ConstraintSet.END,
                “按钮2”,
                ConstraintSet.START,
                resources.getDimensionPixelSize(R.dimen.dp_9)
            )
            //以及底部方向的约束
            ...
            //最后将更新的约束应用到布局
            set.applyTo(it)
        }

MotionLayout

接下来是今天重头戏——MotionLayout。
MotionLayout继承自ConstraintLayout,能够通过约束关系构建丰富的view动画,动画状态分为start与end两个状态,它还能作为支持库,兼容到api 14。
来看下效果图,这是我司App某个页面的动画效果,就是用MotionLayout实现。

在这里插入图片描述

我们可以写个简单的demo实现上面一部分动画效果,如下图

在这里插入图片描述

首先我们需要在资源文件夹 res 下新建一个名为 xml 的资源文件夹,然后在 文件夹内新建一个根节点是 MotionScene 的 xml 文件,文件名为 test_motion_scene.xml,如下:

<?xml version="1.0" encoding="utf-8"?>
<MotionScene xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:motion="http://schemas.android.com/apk/res-auto">
    
</MotionScene>

activity的xml根布局改为MotionLayout,使用app:layoutDescription与之关联

在这里插入图片描述
再编写视图,定义视图具体的view和对应id

<androidx.constraintlayout.motion.widget.MotionLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    app:layoutDescription="@xml/test_motion_scene"
    ...
    >

    <ImageView
        android:id="@+id/iv_head"
        ...
        />
    <TextView
        android:id="@+id/tv1"
        ...
        />

然后切换到test_motion_scene.xml,我们需要明确动画布局的两个状态,start和end。
在MotionScene标签下定义Transition标签,指定动画的start和end状态

<Transition
        motion:constraintSetEnd="@+id/end"
        motion:constraintSetStart="@id/start"
        motion:duration="500">
</Transition>

之后,在Transition同级下再定义ConstrainSet标签,它表示用于指定所有视图在动画序列中某一点上的位置和属性,你可以把它理解成一个集合,集合了所有参与动画的view相关位置和属性,如下:

<?xml version="1.0" encoding="utf-8"?>
<MotionScene 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:motion="http://schemas.android.com/apk/res-auto">
    <Transition>
    ...
    </Transition>

    <ConstraintSet android:id="@+id/start">
    </ConstraintSet>

    <ConstraintSet android:id="@+id/end">
    </ConstraintSet>
</MotionScene>

大体的框架搭建好了,最后就是填充约束view状态的代码了。这时候我们需要明确动画的start状态和end状态,即
(start状态)↓
在这里插入图片描述
(end状态)↓
在这里插入图片描述

前面提到,ConstraintSet是存放一些view 约束和属性的的集合,而具体描述View约束和属性是通过Constraint 标签。我们声明Constraint标签,它支持一组标准 ConstraintLayout 属性,用于添加每个view start状态的约束。

<ConstraintSet android:id="@+id/start">
	<Constraint
			<!-- "android:id"表示activity的xml对应的view id 
            android:id="@id/iv_head"
            android:layout_width="90dp"
            android:layout_height="90dp"
            motion:layout_constraintTop_toTopOf="parent"
            motion:layout_constraintStart_toStartOf="parent"
            motion:layout_constraintEnd_toEndOf="parent"/>
    <Constraint
            android:id="@id/iv1"
            .../>
    <Constraint
            android:id="@id/iv2"
            .../>
    ...
</ConstraintSet>

接下来以同样的方式添加end状态的view约束

<ConstraintSet android:id="@+id/end">
	...
</ConstraintSet>

最后,我们需要让它动起来,在Transition标签写添加一个OnClick标签,run,就能让动画动起来

<Transition
        motion:constraintSetEnd="@+id/end"
        motion:constraintSetStart="@id/start"
        motion:duration="1000">
        <!-- 点击-->
        <OnClick
            motion:clickAction="toggle"
            motion:targetId="@id/search_go_btn"/>
</Transition>

OnClick:表示由用户点击触发

属性:

motion:targetId="@id/target_view" (目标View的id)
如果不指定次属性,就是点击整个屏幕触发如果写了这个属性,就是点击对应id的View 触发转场动画

motion:clickAction=“action” 点击后要进行的行为 ,此属性可以设置以下几个值:

transitionToStart
过渡到 元素 motion::constraintSetStart 属性指定的状态,有过度动画效果。

transitionToEnd
过渡到 元素motion:constraintSetEnd 属性指定的状态,有过度动画效果。

jumpToStart
直接跳转到 元素 motion::constraintSetStart 属性指定的状态,没有动画效果。

jumpToEnd
直接跳转到 元素 motion:constraintSetEnd 属性指定的状态。

toggle
默认值就是这个,在 元素motion:constraintSetStart和 motion:constraintSetEnd 指定的布局之间切换,如果处于start状态就过度到end状态,如果处于end状态就过度到start状态,有过度动画。

除了OnClick之外,还有OnSwipe,它是根据用户滑动行为调整动画的进度,具体可查看文末资料。

改变动画运动过程(关键帧KeyFrameSet)

上面讲解了动画的start与end状态,但是如果我们想在动画运动过程去改变一些属性,比如设置view的透明度、旋转,又或者是改变动画运动过程的轨迹等,这时候可以用到关键帧。

KeyFrameSet是Transition的子元素,与OnClick、OnSwipe同级。KeyFrameSet中可以包含KeyPosition、KeyAttribute、KeyCycle、KeyTimeCycle、KeyTrigger,它们都可以用来改变动画过程。
此外还有与KeyFrameSet同级的KeyPosition、KeyAttribute,具体大家根据需要自行了解即可。

最后再提一下MotionLayout一些常用的java api:
setDebugMode(int debugMode) ——对应xml"app:motionDebug",表示运动进行时是否显示运动路径,用来调试动画;
loadLayoutDescription() ——对应xml"app:layoutDescription",通过代码加载MotionScene;
transitionToStart() ——表示切换到动画start状态;
transitionToEnd() ——表示切换到动画end状态;
它们都默认有过渡效果,如果不需要过渡效果,可以通过
"setProgress(float pos)"处理过渡进度,取值0-1;
transitionToState(int id) ——表示切换到动画某个状态,可以是start也可以是end,参数id指的是ConstraintSet标签定义的id;
setTransitionListener(MotionLayout.TransitionListener listener) ——监听MotionLayout动画执行过程,接口有四个方法,onTransitionStarted、onTransitionChange、onTransitionCompleted、onTransitionTrigger。

OK,最最后,ConstraintLayout能有效提升日常的开发效率,通过这篇文章的介绍,此刻你学废了嘛~

参考
MotionLayout官网文档
ConstraintLayout / MotionLayout GitHub示例
MotionLayout 使用说明书(入门级详解)
ConstraintLayout使用小技巧

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

相关推荐

Android ConstraintLayout 进阶:屏障线与链式结构的实战应用

本文深入探讨了Android ConstraintLayout中屏障线与链式结构的实战应用。通过商品详情页、评论列表等实例,详解了屏障线如何智能对齐动态内容,以及链式结构如何实现视图的灵活均匀分布。掌握这两种高级特性,能显著简化复杂动态布局的实现,提升开发效率与布局性能。

weixin_29261711的博客 221

Android app:layout_constraintHorizontal_bias=“0“属性详解

是用于控制控件在水平方向上相对约束位置的关键属性。,尤其是在复杂布局中。当控件需频繁调整位置时,可通过代码动态修改。在 Android 的 ConstraintLayout 中,该属性用于调整控件在两个水平约束点之间的偏移比例,取值范围为。若控件约束到两个不同的控件(如左到 A,右到 B),在 ConstraintLayout 的。如果控件仅约束到左边界(无右约束),决定其在 A 和 B 之间的位置。无效,控件会固定在左边界。

Android开发领域创作者 830

Android | ConstraintLayout使用详解

前言 ConstraintLayout是Google在Google I/O 2016大会上发布的一种新的布局容器(ViewGroup),它支持以灵活的方式来放置子控件和调整子控件的大小。ConstraintLayout功能强大,它能实现Android中传统的布局容器FrameLayout、LinearLayout和RelativeLayout所能实现的所有功能。我们可以使用ConstraintLayout来优化页面的布局层次。 为什么推荐使用ConstraintLayout 从Android Studio

cyc的专栏 1558

ConstraintLayout基础详解(中)

ConstraintLayout基础详解(中)

听海的博客 1993

【Android进阶】10、用 ConstraintLayout 来布局

如果需要给 RecyclerView 列表项添加样式,则需要用 ConstraintLayout。ConstraintLayout最适合用来设计扁平或是复杂又漂亮的非嵌套布局,心智负担更小。其中蓝图可显示 View 的轮廓,而预览视图可看到预览效果。文件夹中,放置资源图片。

呆呆的猫的博客 361

Android进阶之路 - ConstraintLayout百科全书

其实Google在2016年就已经推出了ConstraintLayout 约束布局,但当时并没有推广普及且很少人会用到 ~ 直到2018年开始约束布局才慢慢出现到了大众面前,不过用此布局的开发人员还是很少~ 最后Google为了让开发者使用约束布局直接在我们每次新建XML的时候都默认使用了ConstraintLayout (好吧,其实我有时候还会将其直接替换成LinearLayout或RelativeLayout,毕竟用的比较顺手…) 常用布局基础相对定位角度定位边距居中偏移角度定位尺寸约束链 常用布局

Android、前端、小程序、后端 1423

Spring StateMachine 并发变更状态导致@OnTransition()未监听到状态变更事件

Spring StateMachine 并发变更状态导致@OnTransition()未监听到状态变更事件

weixin_40903055的博客 1779

电压比较器---滞回比较器(施密特触发器)

当输入电压从小电压开始增加,当其大于VT+时,电压比较器输出低电平,此时阈值电压变成下门限电压(VT-);当输入电压从大电压开始减小,当其小于VT-时,电压比较器输出高电平,此时阈值电压变成上门限电压(VT+);只有当第一次超过上门限电压或者下门限电压值,电压比较器的输出才会翻转变化;Uo为比较输出电压,有两种电压状态VoH(高电平)和VoL(低电平);当Uo输出为高时,电压比较器的阈值电压是上门限电压(VT+);当Uo输出为低时,电压比较器的阈值电压是下门限电压(VT-);Vref为比较参考电压;

weixin_69076249的博客 1万+

Android高级进阶01-ConstraintLayout

1.ConstraintLayout介绍 1:ConstraintLayout也称为约束布局,它的出现为了减少布局的嵌套,从而提高视图绘制的性能。同时ConstraintLayout也可以实现简单的动画效果。 2:ConstraintLayout在Android Studio2.3中被使用,作为创建Empty Activity的默认布局。 2.app:layout_constraintXxx_t...

qq_44637792的博客 498

Tessy单元测试软件安装与破解避坑指南(附个人使用路径设置详解)

本文详细介绍了Tessy单元测试软件的安装与配置全流程,包括系统需求、服务器连接设置、环境变量配置等关键步骤,帮助开发者避开常见陷阱。特别提供了个人使用路径设置详解,确保Tessy在嵌入式开发环境中高效运行,适用于汽车电子、工业控制等领域。

weixin_33709364的博客 346

Zemax操作33--5倍激光扩束器

5倍扩束

lzy750750的博客 2933

Android Studio 布局实战:从LinearLayout到ConstraintLayout的进阶指南

本文详细解析Android Studio中从LinearLayout到ConstraintLayout的布局进阶实战。通过对比传统布局的性能瓶颈,重点介绍ConstraintLayout的约束概念、可视化编辑器及高级技巧,帮助开发者构建高效、扁平化的Android界面,显著提升应用性能。

xx56789的博客 176

伺服驱动器485控制(1):使用串口软件来读参数

下面介绍如何读伺服驱动器的一圈脉冲数,通过查看伺服驱动器说明书,得知一圈脉冲数的参数是PA11 其通讯地址是十进制 11 十六进制 0A, 串口软件指令都是以十六进制表示,字节单位。注意:485通讯地一定要接,如果不接可能会通讯异常,假如上位机没有485通讯地,而接了两根485+ 和485-,出现通讯不好和反应慢的情况,请把485GND接在上位机0V。笔记本的网口不要和驱动器了网口用网线连接,笔记本网口是以太网,伺服驱动器网口是485。通过驱动器按键面板查看PA11的参数是10000,因此数据对的上。

weixin_39727602的博客 5133

Android进阶——实战使用ConstraintLayout 替代LinearLayout、RelativeLayout和PercentLayout

ConstraintLayout 可以替代很多常规布局组件快速实现相同的效果,尤其是在使用LinearLayout、RelativeLayout、PercentLayout需要进行N层嵌套的才能实现的时候,使用约束布局简单有效的实现UI效果。

最美不过,心中有梦,身旁有你! 2万+

省三医院新门诊大楼网络安全建设项目实施方案

为了响应国家建设数字医疗,构建医联网、医共体的号召,新门诊大楼现有计算机网络,实现各门诊室、药房、医学影像科室及后勤科室的终端数据互通。在互联网出口以三层模式部署两台防火墙,作为连接公网的出口设备;出于等保合规和自身业务安全的考虑,现需要该网络上通过网络安全设备实现安全建设。公网出口防火墙,配置攻击防御策略,防御互联网上的病毒进入内网。公网出口防火墙配置攻击防御策略,防御外网对内网的入侵行为。服务器取得边界防火墙,配置攻击防御策略,入侵防御策略。公网出口防火墙配置入侵防御策略,防御外网对内网发起的D。

m0_63645854的博客 2014

把 SNC 支持的通信链路一次讲透,SAP GUI、RFC、CPIC、SAProuter 到底谁在保护谁

摘要: SNC(Secure Network Communications)是SAP系统中用于保护特定通信链路的安全机制,主要应用于DIAG、RFC、CPIC等SAP协议,而非HTTP等互联网协议(后者由SSL/TLS处理)。其核心在于保护通信端点之间的逻辑链路,需在发起方和接收方同时配置SNC参数,包括SNC名称、保护等级(QoP)等。实际项目中,SNC的配置涉及多个层面,如SAP GUI到ABAP平台的登录链路、外部程序通过RFC/CPIC连接ABAP的认证、ABAP系统间的跨系统通信等。配置不当可能导

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 251

Android高手进阶(十九) - ConstraintLayout入门与实践

ConstraintLayout A.布局 xml 代码不要记,看一遍就够了 一.居中于父容器 app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constrain...

weixin_34220179的博客 243

一个超酷的开源uHand2.0机械手掌项目

uHand2.0是深圳乐幻索尔公司开源的一款机械手掌,它长下面这个样子:1、uHand2.0外观图之前在公众号就分享过视频:学习嵌入式可以带娃,不信你们看2、uHand2.0硬件原理图看...

Bruce.yang的嵌入式之旅 4460

android 控件权重,Android高手进阶(十九) - ConstraintLayout入门与实践

ConstraintLayoutA.布局xml 代码不要记,看一遍就够了java一.居中于父容器app:layout_constraintStart_toStartOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintTop_toTopOf="parent"app:layout_constraintBott...

weixin_42638178的博客 863

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Android布局基础与UI设计进阶:从LinearLayout到ConstraintLayout实战指南

在Android开发中,界面是否美观耐用,往往取决于布局基础是否扎实。布局负责控件的空间位置与尺寸分配,UI设计则决定色彩、字体与层级等视觉语言,两者相辅相成。从最基础的LinearLayout、RelativeLayout、FrameLayout等容器的选型逻辑,到8dp栅格体系、对齐与间距的统一,再到ConstraintLayout的约束关系、Guideline辅助线和Group分组技巧,掌握这些核心概念能显著提升页面质量与开发效率。合理控制View层级、避免过度绘制,并善用Layout Inspect

weixin_31236101的博客 102

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Android Studio可视化布局进阶:不写一行代码玩转ConstraintLayout Barrier

本文详细介绍了如何在Android Studio中通过可视化操作高效使用ConstraintLayout的Barrier功能,实现动态布局设计。无需编写XML代码,即可掌握Barrier的基础概念、创建流程及实战应用,特别适合处理多语言文本对齐和复杂表单布局等场景。

weixin_30315905的博客 243

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

ConstraintLayout 从基础到进阶

约束布局核心要点摘要 约束布局是Android Studio 2.3后推荐的默认布局方式,相比传统相对布局具有显著优势: 性能优化:通过单层扁平化结构减少嵌套层级,有效提升渲染性能 功能强大:支持角度定位、百分比布局和基线对齐等高级特性 开发效率:2小时掌握即可长期受益,主流应用已验证其可靠性 布局方式: 支持双向约束定位(水平和垂直) 提供权重分配功能(需设置0dp并配置weight属性) 可实现精准的文本基线对齐 兼容建议:简单布局仍可用线性/帧布局,复杂场景优先采用约束布局替代相对布局 核心价值:专为

tmacfrank 1509

Android ConstraintLayout使用全解析

文章目录简介使用方法基础用法约束偏移写在最后 简介 ConstraintLayout即约束布局,最初是用来解决Android界面层级过多的问题,使得视图每一帧的绘制时间减少,相比于传统的相对布局和线性布局,功能更强大,也更容易使用 使用方法 基础用法 约束 约束布局中的子控件需要指定四个方向上的约束(也可以把它看作是控件的四个方向上的力),在没有指定任何约束的情况下默认在左上角,至少也要指定水平和竖直方向各一个约束,否则编译器中子控件会标红(虽然编译和运行没有问题) 约束需要指定控件的上下左右,约束的参照也

qq_41341864的博客 1442

【Android】ConstraintLayout约束布局最全解析

ConstraintLayout约束布局最全解析一、ConstraintLayout概述二、ConstraintLayout基础篇2.1 基础操作2.2 控件间添加约束2.3 约束布局xml代码实现三、ConstraintLayout 进阶篇3.1 Chains链3.2 尺寸约束3.3 百分比布局3.4 radio属性3.5 圆形定位四、ConstraintLayout 高级篇4.1 Guideline4.3 Group4.2 Barrier 一、ConstraintLayout概述 Constraint

lucashu的博客 3万+
上一篇: Android Material组件使用详解
哆Laker梦
博客等级 码龄11年 23粉丝 7原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值