android 约束布局 性能,Android ConstraintLayout约束布局完全解析

本文深入探讨了如何使用ConstraintLayout进行Android布局优化,减少嵌套,提高性能。通过官方数据和性能比较,展示ConstraintLayout在测量和布局阶段的优势。同时,介绍了ConstraintLayout的使用方法,包括属性、匹配约束、宽高比、角度约束、链、Guideline等特性,并分析了其在简单和复杂布局中的性能表现。文章还提到了代码布局的挑战以及ConstraintLayout的潜在缺点和性能问题。
摘要由CSDN通过智能技术生成

布局优化是性能优化的一个方向点,包括了根据需求应该选用哪种布局容器、ViewStub懒加载,如何减少布局层级等,今天我们要探讨的就是如何使用ConstraintLayout来优化我们的布局层级。

eff62726ea84

概述.png

提出问题

为什么要用这个布局?

怎么用这个布局?

不足在哪里?

优势

ConstraintLayout就是为性能而生,目标就是减少布局嵌套,提高measure+layout性能,来看看官方给出的数据。

eff62726ea84

性能比较结果.jpeg

ConstraintLayout 在测量/布局阶段的性能比 RelativeLayout大约高40%!而它使用的性能检测工具是Android 7.0(API 级别 24)中引入的 OnFrameMetricsAvailableListener。通过该类,你可以收集有关应用界面渲染的逐帧时间信息,进而比较分析不同布局每次测量和布局操作所花费的时间。

另外使用AS的图形化界面可以非常方便的完成布局操作,这里不赘述了文末有参考文章。

配置

引入最新版本constraint layout库

implementation 'com.android.support.constraint:constraint-layout:1.1.3'

旧界面转换为ConstraintLayout

首先,AS支持一键将已有的布局文件转成ConstraintLayout,是不是很贴心,要做就做全套的。

eff62726ea84

布局转换.png

用法

1. 属性layout_constraintXXX_toYYYOf

xxx表示该控件在哪个方向的约束,YYY表示该约束指向的控件的方向(我已经尝试说人话了...),它们的可以是 left/right/top/bottom/start/end的任意一种,包含了水平方向和垂直方向的约束,属性的值为目标控件的id,看个例子item1_constraint.xml。

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"

tools:context=".MainActivity">

android:id="@+id/titleTextView"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Hello World1!"

app:layout_constraintLeft_toLeftOf="parent"

app:layout_constraintRight_toRightOf="parent"

app:layout_constraintTop_toTopOf="parent" />

android:id="@+id/subtitleTextView"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Hello World2!"

app:layout_constraintLeft_toLeftOf="parent"

app:layout_constraintRight_toRightOf="parent"

app:layout_constraintTop_toBottomOf="@id/titleTextView" />

eff62726ea84

效果图.png

可以看到两个控件水平方向的约束都指向parent也就是父控件ConstraintLayout,由于两边拉力作用就成了居中的样式,垂直方向上由于第二个textview使用了约束app:layout_constraintTop_toBottomOf="@id/titleTextView"࿰

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值