android布局优化之< merge /> 和 <ViewStub />

在activity被初始化后。执行到onCreate后, 会执行setContentView()。这个哪怕是个初学者也会知道。

但这里有一个小问题:如果layout的嵌套过于复杂,会出现绘制过度或者加载变慢等问题。那就需要对layout进行优化。

那么优化方式多种多样,

比如约束布局 - ConstraintLayout
ConstraintLayout 是一个ViewGroup,可以在Api9以上的Android系统使用它,它的出现主要是为了解决布局嵌套过多的问题,以灵活的方式定位和调整小部件。从 Android Studio 2.3 起,官方的模板默认使用 ConstraintLayout。

当然这里对 ConstraintLayout 不做介绍。不会的同学请自行百度,今天要说的是 < merge />< ViewStub />。废话不多。开始正文:

之一:< merge />

应用场景:比如在layout中没有嵌套到第三层。也就是只有父布局ViewGroup和下面的view,再无更深的嵌套,如图:
在这里插入图片描述
这时候就可以使用< merge /> :

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

    <ImageView
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_gravity="center_horizontal"
        android:src="@drawable/ic_launcher_background" />
</merge>

当然,使用任何一个viewGroup都可以实现,但是,但是,但是:

这就表示当有任何一个地方去include这个布局时,会将merge标签内包含的内容直接填充到include的位置,不会再添加任何额外的布局结构

用人话说就是:节省性能

之一:< ViewStub />

ViewStub是一个轻量级的view,看不见,不占用布局位置。占用资源也非常的小。只有在Inflate的时候才会初始化,即延迟加载。

特点:

  • 只能Inflate一次,之后ViewStub对象就会被值为空。
  • 只能Inflate一个布局文件,不支持具体的view(可以把view单独抽离为 layout文件,根据情况结合merge 使用)

使用如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    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"
    android:orientation="vertical"
    tools:context=".MainActivity">


    <ViewStub
        android:id="@+id/vs"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout="@layout/test1" />
</LinearLayout>

代码中的test1即是延迟加载的layout。这里就不展示了。

扫描二维码关注公众号,回复: 16147737 查看本文章

加载方法:

 vs?.inflate()

本篇只做简单的特效介绍和使用方法。具体更深的请自行百度。
END

猜你喜欢

转载自blog.csdn.net/lixinxiaos/article/details/123845888