Android性能优化xml之<include>、<merge>、<ViewStub>标签的使用
一、使用<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>标签的使用的更多相关文章
- Android性能优化:布局优化 详细解析(含<include>、<ViewStub>、<merge>讲解 )
1. 影响的性能 布局性能的好坏 主要影响 :Android应用中的页面显示速度 2. 如何影响性能 布局影响Android性能的实质:页面的测量 & 绘制时间 1个页面通过递归 完成测量 & ...
- Android性能优化之ViewStub
http://www.cnblogs.com/lwbqqyumidi/p/4047108.html ViewStub是Android布局优化中一个很不错的标签/控件,直接继承自View.虽然Andro ...
- Android性能优化之一:ViewStub
ViewStub是Android布局优化中一个很不错的标签/控件,直接继承自View.虽然Android开发人员基本上都听说过,但是真正用的可能不多. ViewStub可以理解成一个非常轻量级的Vie ...
- Android性能优化之:ViewStub
ViewStub是Android布局优化中一个很不错的标签/控件,直接继承自View.虽然Android开发人员基本上都听说过,但是真正用的可能不多. ViewStub可以理解成一个非常轻量级的Vie ...
- Android性能优化之布局优化
最新最准确内容建议直接访问原文:Android性能优化之布局优化 本文为Android性能优化的第二篇——布局优化,主要介绍使用抽象布局标签(include, viewstub, merge).去除不 ...
- Android性能优化之中的一个 布局优化
本文为Android性能优化--布局优化,主要介绍使用抽象布局标签(include, viewstub, merge).去除不必要的嵌套和View节点.降低不必要的infalte及其它Layout方面 ...
- android 性能优化
本章介绍android高级开发中,对于性能方面的处理.主要包括电量,视图,内存三个性能方面的知识点. 1.视图性能 (1)Overdraw简介 Overdraw就是过度绘制,是指在一帧的时间内(16. ...
- 【转】Android性能优化之布局优化篇
转自:http://blog.csdn.net/feiduclear_up/article/details/46670433 Android性能优化之布局优化篇 分类: andorid 开发2015 ...
- 《Android开发艺术探索》读书笔记 (13) 第13章 综合技术、第14章 JNI和NDK编程、第15章 Android性能优化
第13章 综合技术 13.1 使用CrashHandler来获取应用的Crash信息 (1)应用发生Crash在所难免,但是如何采集crash信息以供后续开发处理这类问题呢?利用Thread类的set ...
随机推荐
- MyBatis记录
记录一下MyBatis的几个模块大纲,除去缓存以及集合映射两个部分 Mybatis架构 1. mybatis配置 SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了myb ...
- JavaPOI处理Excel
java处理excel,心得分享如下,如有不妥或者需要补充的地方,敬请指出,欢迎随时交流 1.加载excel,获得workbook对象 fileTemp = new File(pathOfMExce ...
- 【NOIP2014】子矩阵
这题如果按暴力做只有一半分,最大时间复杂度为O(C(16,8)*C(16,8)); 很容易算出超时: 我们可以发现如果直接dp会很难想,但是知道选哪几行去dp就很好写状态转移方程: dp[i][j]= ...
- 【pac4j】OAuth 认证机制 入门篇
1,pac4j是什么? pac4j是一个支持多种支持多种协议的身份认证的Java客户端. 2,pac4j的12种客户端认证机制:目前我只有用过第一和第八种. OAuth (1.0 & 2.0) ...
- 『HTMl5』学习日志
w3g提供在线校验页面:http://validator.w3.org/ 1.文本框获取焦点 <%@ page language="java" import="ja ...
- 又想起Solaris
想起曾几何时,学习的第一个UNIX-like操作系统.只可惜,从来都是在此操作系统上用C语言编程,而没有用过Sun公司的java. 又几何时,Sun公司慢慢不行了.再后来过了几年,Sun公司把Ultr ...
- 一款代码扫描工具 火线!!!! fireline
1. 在火线官网进行火线相关文件的下载,下载后的文件为fireline.jar 2.运行fireline.jar文件前请先确认系统环境中已安装Java JDK. java-version 查看 3 ...
- MySQL(九)之数据表的查询详解(SELECT语法)二
上一篇讲了比较简单的单表查询以及MySQL的组函数,这一篇给大家分享一点比较难得知识了,关于多表查询,子查询,左连接,外连接等等.希望大家能都得到帮助! 在开始之前因为要多表查询,所以搭建好环境: 1 ...
- Spring Boot-------项目搭建及注解
Spring Boot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需 ...
- linq之延迟加载和即时加载+标准查询运算符
延迟加载 Linq查询的执行结果是IEnumerable<T>类型,而对IEnumerable<T>,在内部,C#通过yield关键字实现迭代器达到延迟加载的目的.从而使Lin ...