一、使用<include>标签对“重复代码”进行复用

<include>标签是我们进行Android开发中经常用到的标签,比如多个界面都同样用到了一个左侧筛选功能的布局,这个筛选界面可以使用一个单独的xml,然后使用时用<include>引用。

二、使用<merge>标签删除多余的层级

<merge>标签多用于替换FrameLayout或者当一个布局包含另外一个布局时,<merge>标签用于消除父子层次结构中多余的视图组。例如:我们建立的一个布局是垂直的,此时如果引入另外一个垂直布局的<include>,这时如果include布局使用的LinearLayout就没意义了,使用的话反而会减慢UI表现。这时我们可以使用<merge>标签,它可以排除一个布局插入另外一个布局时产生的多余的ViewGroup。具体用法如下

1.用法1替换FrameLayout

<merge xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" > <TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="我是button" /> <Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="我又是个button" /> </merge>

2.用法2插入布局时消除多余的视图组

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > <include layout="@layout/fragment_main" /> </LinearLayout>

其中fragment_main是用法1中的布局,这时我们能看到按钮是垂直排列的。

<merge>只能作为xml布局的根标签使用,当Inflate以<merge>开头的布局文件时,必须指定一个父ViewGroup并且必须设定attachToBoot为true。

三、使用<ViewStub>标签进行“延迟加载”

<ViewStub>标签最大的特点就是你需要的时候才会加载,并且不会影响UI初始化的性能。一些不常用的布局文件如显示错误信息的diaolog,这时都可以用<ViewStub>标签进行优化。

有人也许会说,我用View.GONE也可以达到相同的效果呀?那么两者有什么区别呢?

<VewStub>只能inflate一次,用完以后<ViewStub>就会置空,后期不能再次使用,只有重新开启应用或者杀死进程后才可再次使用。类似显示隐藏按钮这种功能是不能实现的。View.GONE比较费资源,虽然已经GONE掉了,但显示View时还是会加载的。

xml中使用方法如下

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="match_parent"> <Button
android:onClick="click"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="我的按钮"/> <ViewStub
android:id="@+id/vs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout="@layout/layout_button"/> </LinearLayout>

activity中加载

public void click(View view) {
ViewStub vs = (ViewStub) findViewById(R.id.vs);
vs.inflate();
}

< ViewStub>可完全取代< include>,但< ViewStub>目前还无法取代< merge>  

Android性能优化xml之<include>、<merge>、<ViewStub>标签的使用的更多相关文章

  1. Android性能优化:布局优化 详细解析(含&lt;include&gt;、&lt;ViewStub&gt;、&lt;merge&gt;讲解 )

    1. 影响的性能 布局性能的好坏 主要影响 :Android应用中的页面显示速度 2. 如何影响性能 布局影响Android性能的实质:页面的测量 & 绘制时间 1个页面通过递归 完成测量 & ...

  2. Android性能优化之ViewStub

    http://www.cnblogs.com/lwbqqyumidi/p/4047108.html ViewStub是Android布局优化中一个很不错的标签/控件,直接继承自View.虽然Andro ...

  3. Android性能优化之一:ViewStub

    ViewStub是Android布局优化中一个很不错的标签/控件,直接继承自View.虽然Android开发人员基本上都听说过,但是真正用的可能不多. ViewStub可以理解成一个非常轻量级的Vie ...

  4. Android性能优化之:ViewStub

    ViewStub是Android布局优化中一个很不错的标签/控件,直接继承自View.虽然Android开发人员基本上都听说过,但是真正用的可能不多. ViewStub可以理解成一个非常轻量级的Vie ...

  5. Android性能优化之布局优化

    最新最准确内容建议直接访问原文:Android性能优化之布局优化 本文为Android性能优化的第二篇——布局优化,主要介绍使用抽象布局标签(include, viewstub, merge).去除不 ...

  6. Android性能优化之中的一个 布局优化

    本文为Android性能优化--布局优化,主要介绍使用抽象布局标签(include, viewstub, merge).去除不必要的嵌套和View节点.降低不必要的infalte及其它Layout方面 ...

  7. android 性能优化

    本章介绍android高级开发中,对于性能方面的处理.主要包括电量,视图,内存三个性能方面的知识点. 1.视图性能 (1)Overdraw简介 Overdraw就是过度绘制,是指在一帧的时间内(16. ...

  8. 【转】Android性能优化之布局优化篇

     转自:http://blog.csdn.net/feiduclear_up/article/details/46670433 Android性能优化之布局优化篇 分类: andorid 开发2015 ...

  9. 《Android开发艺术探索》读书笔记 (13) 第13章 综合技术、第14章 JNI和NDK编程、第15章 Android性能优化

    第13章 综合技术 13.1 使用CrashHandler来获取应用的Crash信息 (1)应用发生Crash在所难免,但是如何采集crash信息以供后续开发处理这类问题呢?利用Thread类的set ...

随机推荐

  1. Nginx - 配置

    1 自动显示目录 autoindex on; 1.1 显示文件大小 autoindex_exact_size off; 默认为on,显示出文件的确切大小,单位是bytes. 改为off后,显示出文件的 ...

  2. CSS中定义CLASS时,中间有空格和每空格的区别

    css选择器的格式,规定不带空格的选择条件之间是“且”关系,带空格的是“父子”关系,并且可以是非直接的“父子”关系 <style> .e1.e2 { background-color:ye ...

  3. Data Flow -&gt;&gt; Multicast

    Multicast的中文意思是组播或者多播.那自然这个组件干的事情就是可以把一份数据库输入给多少接收组件作为输入.这里有篇别人的博文讲到了Multicast的主要作用和应用场景:http://www. ...

  4. css样式--表格

    1.示例源码 <!DOCTYPE html><html><head><meta charset="utf-8"> <title ...

  5. IMCASH:2019年区块链不会风平浪静,至少还有10件事值得期待

    当我们在说2019年是值得期待的一年时,我们还是得做到有根有据.那么,2019年在区块链行业都会发生哪些引导行业风向.影响整个行业的事件呢? 今天,白话区块链带着大家顺着时间线梳理一下. 01 第一季 ...

  6. 微信获取企业token流程

    1.获取服务商Accesstoken(每10分钟企业微信会推送一次,两个小时后过期) 2.根据suitid.accesstoken.第三方企业corpid.第三方企业permanentcode,得到第 ...

  7. windows server 2003产生的 Minidmp蓝屏文件分析求助

    在机房运行的四台服务器中均出现了蓝屏dmp文件,经过整理发现CDMS主备服务器最近(2018年1月开始)蓝屏的dmp很多.经过自己的学习分析发现不足以找到先关的原因和处理方法,希望得到大牛们的帮助.以 ...

  8. 在IIS7里配置 ISAPI,运行dll程序,总提示下载dll

    在IIS7里配置 ISAPI,运行dll程序,总提示下载dll,只需要把对应站点应用程序池里面的高级设置里的启用32位应用程序,设为“true"即可.

  9. vim多行注释与取消

    神操作 在vim中编写代码,常常会遇到多行注释和取消注释的情况,在VS中我们可以用默认的快捷键或者在设置中自定义快捷键来解决这个问题. vim既然这么强大,必然也是有快捷键来完成的.下面给出具体步骤: ...

  10. jqeury 基础

    jquery 选择器: 基本选择器:#id ..class.*(匹配所有) 层次选择器: $(div span) 选取<div>里的所有的<span>元素. $(div> ...