本文是关于项目优化布局的,小弟和大家分享一下,亲手自作的代码片段。大神请直接绕过,好了废话不多,上正文。
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当作该布局的顶节点,这样在被引入时顶结点会自动被忽略,而将其子节点全部合并到主布局中。
哈哈哈。周末了,大家赶紧去嗨嗨。小弟也不多说了....