Android、布局优化、include、merge、

本文是关于项目优化布局的,小弟和大家分享一下,亲手自作的代码片段。大神请直接绕过,好了废话不多,上正文。

Android 布局优化方向:抽象布局标签。

1.使用<include>标签:

     <include>标签可以把几个布局中公共的部分提取出来,实现布局模块化。例如下边的这个布局,主要就是提示用户的进度条和提示框,可以重复利用(重复利用)。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center" >
    <!-- 再试一次 -->
    <TextView
        android:id="@+id/tv_retry"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:background="#ffffff" />
    <!-- 进度条 -->
    <ProgressBar
        android:id="@+id/pb_loading"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center" />

</LinearLayout>
在别的布局中就可可以直接引用了。这样做布局中就很模块化了。个人感觉这样做有点像java多态的思想。废话不多说。看看别的地方怎么用的。(这里引用)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center"
     >

    <include
        android:id="@+id/rlLoading"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        layout="@layout/view_loading"
        android:background="@android:color/transparent"
        android:gravity="center" />

</LinearLayout>
上边这段直接引用了第一布局。并且给第一个布局的其他属性重新定义,比如id、layout_width、layout_height等等。这些定义就会覆盖第一个布局中于有的定义。

2.使用<merge>标签

上边的引用实现了布局的模块化编写,实现了优化的地第一步。但是nclude使用后可能导致布局嵌套过多,多余不必要的layout节点,从而导致解析变慢示布局边界查看。下边将介绍第二步骤,<merge>的使用,主要作用就是尽可能删除不必要的子节点。

<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android" >
    <!-- 再试一次 -->
    <TextView
        android:id="@+id/tv_retry"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:background="#ffffff" />
    <!-- 进度条 -->
    <ProgressBar
        android:id="@+id/pb_loading"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center" />

</merge>

注意看一下区别:讲重用布局中的根节点改变成merge了。这样操作就可以删除不必要的layout节点咯。下边用事实证明一下。布局调优工具hierarchy viewer操作一下。具体的操作就是找到SDK的tools文件夹下,名为hierarchyviewer.bat的文件,当程序跑起来的时候就刷新页面。

优化之前:


优化之后:


是不是少了一个布局节点,解析是不是快人一步。

但是使用<merge>标签的请款请大家记一下:

1 、布局顶结点是FrameLayout且不需要设置background或padding等属性,可以用merge代替,因为Activity内容试图的parent view就是个FrameLayout,所以可以用merge消除只剩一个。
2、某布局作为子布局被其他布局include时,使用merge当作该布局的顶节点,这样在被引入时顶结点会自动被忽略,而将其子节点全部合并到主布局中。

哈哈哈。周末了,大家赶紧去嗨嗨。小弟也不多说了....




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值