利用 <include />标签(避免重复渲染)和 ViewStub类(延迟加载)
来源:互联网 发布:手机急救软件 编辑:程序博客网 时间:2024/04/30 07:24
当你在Application中创建复杂的布局时,页面的渲染过程也变得更加缓慢。
map.xml
此时,我们需要利用 <include />标签(避免重复渲染)和 ViewStub类(延迟加载)来优化我们的页面。
(原文地址:http://blog.csdn.net/vector_yi/article/details/24402101)
一、利用<include />标签来避免重复渲染
当我们需要为App中的每个View都添加一个header或者footer时,你会怎么做?
重复地复制粘贴可以解决这个问题,但未免太繁杂。可以试着使用<include />标签:
第一种方式,在<include />标签内指定width及height:
main.xml- <RelativeLayout xmlns:android = "http://schemas.android.com/apk/res/android"
- android:layout_width= "fill_parent"
- android:layout_height= "fill_parent" >
- <Button
- android:layout_width ="fill_parent"
- android:layout_height ="wrap_content"
- android:layout_gravity ="center_vertical"
- android:onClick ="onShowMap"
- android:text ="@string/show_map" />
- <include
- android:layout_width ="fill_parent"
- android:layout_height ="wrap_content"
- android:layout_alignParentBottom ="true"
- android:layout_marginBottom ="30dp"
- layout ="@layout/footer" />
- </RelativeLayout>
footer.xml
- <TextView xmlns:android = "http://schemas.android.com/apk/res/android"
- android:layout_width= "0dp"
- android:layout_height= "0dp"
- android:gravity= "center"
- android:text= "@string/footer_text" />
有个小细节需要注意,在footer.xml中,我们将width及height都设为0dp.目的是为了配合<include/>标签中对width及height的定义。
第二种方式,直接引用:
main.xml
- <RelativeLayout xmlns:android = "http://schemas.android.com/apk/res/android"
- android:layout_width= "fill_parent"
- android:layout_height= "fill_parent" >
- <Button
- android:layout_width ="fill_parent"
- android:layout_height ="wrap_content"
- android:layout_gravity ="center_vertical"
- android:onClick ="onShowMap"
- android:text ="@string/show_map" />
- <include layout ="@layout/footer" />
- </RelativeLayout>
footer.xml
- <TextView xmlns:android = "http://schemas.android.com/apk/res/android"
- android:layout_width= "fill_parent"
- android:layout_height= "wrap_content"
- android:layout_alignParentBottom= "true"
- android:layout_marginBottom= "30dp"
- android:gravity= "center"
- android:text= "@string/footer_text" />
二、利用ViewStub类来延迟加载视图
在设计视图时,有时会考虑到某些视图的可见性是依赖于用户的操作或者运行设备的具体环境的。
此时你会如何设计?仅仅是改变View的visible属性?
我们先来看看ViewStub的介绍:
ViewStub是一个不可见、不占空间(zero-sized)的控件,它可以用来在运行时延迟加载视图资源。只有当我们将ViewStub的可见性设为true,或者调用inflate()方法,它的视图资源才会被加载。
假设我们设计的一个页面中包含地图View,试想一下以下这种情况:
有些用户不需要看到地图。
既然用户不需要看到地图,我们为何还坚持不懈地加载它?这反而影响了我们App的Performance。
此时,我们就可以利用ViewStub类了:
main.xml
- <RelativeLayout xmlns:android = "http://schemas.android.com/apk/res/android"
- android:layout_width= "fill_parent"
- android:layout_height= "fill_parent" >
- <Button
- android:layout_width ="fill_parent"
- android:layout_height ="wrap_content"
- android:layout_gravity ="center_vertical"
- android:onClick ="onShowMap"
- android:text ="@string/show_map" />
- <ViewStub
- android:id ="@+id/map_stub"
- android:layout_width ="fill_parent"
- android:layout_height ="fill_parent"
- android:inflatedId ="@+id/map_view"
- android:layout ="@layout/map" />
- </RelativeLayout>
map.xml
- <com.google.android.maps.MapView xmlns:android ="http://schemas.android.com/apk/res/android"
- android:layout_width= "fill_parent"
- android:layout_height= "fill_parent"
- android:apiKey= "my_api_key"
- android:clickable= "true" />
接下来看看MainActivity
- public class MainActivity extends MapActivity {
- private View mViewStub;
- @Override
- public void onCreate (Bundle savedInstanceState ) {
- super. onCreate( savedInstanceState );
- setContentView( R. layout. main);
- mViewStub = findViewById( R. id. map_stub);
- }
- public void onShowMap (View v) {
- mViewStub. setVisibility (View .VISIBLE );
- }
- ....
- }
如你所见,在需要显示图像时我们才调用onShowMap来改变map_stub的可见性。在改变之前,map_stub都不会渲染加载视图资源。
小结:
1.当我们的页面变得复杂,XML文件内容过多时,<include />标签可以有效地帮助我们整理文件内容,同时提高了XML文件的可读性。同时,它的用法也与Fragment类似。
2.ViewStub是一个极佳的延迟加载视图资源的方式。只要你设计的视图是依赖于上下文来改变其可见性的,就利用ViewStub类吧。也许当你只将其应用在一个简单的页面当中时,并不会感觉到在性能上有任何提升,但是在复杂页面中,它的效果是极佳的。
0 0
- 利用 <include />标签(避免重复渲染)和 ViewStub类(延迟加载)
- 优化知识,利用ViewStub类来延迟加载视图 延迟加载和避免重复渲染视图
- 利用<include />标签来避免重复渲染
- 50个Android开发技巧(2,使用延迟加载以及避免代码重复,include和viewstub)
- 延迟加载视图,避免重复渲染视
- 利用ViewStub类来延迟加载视图
- 50个Android开发技巧(02 延迟加载和避免重复渲染视图)
- ViewStub类延迟加载
- 通过 include 标签来避免代码重复加载
- 避免ViewStub重复填充
- 使用延迟加载以及避免代码重复
- <include /> <viewstub /> <merge /> 标签
- ViewStub延迟创建(加载)
- 延迟加载之ViewStub
- ViewStub延迟加载技术
- Using lazy loading and avoiding replication(延迟加载和避免重复)
- android之<include>和<ViewStub>标签的区别
- Android include和merge标签、ViewStub控件的使用总结
- OPENCV中提取连通区域轮廓
- 必须大数据的几大理由!
- 【myeclipse】myeclipse优化
- Twemproxy源码走读(4):运行主流程
- 统计学3
- 利用 <include />标签(避免重复渲染)和 ViewStub类(延迟加载)
- 计算机学习第一阶段面向基础
- iOS 开发 网络编程详解之OSI七层模型和TCP/IP四层模型
- Java NIO系列教程(一) Java NIO 概述
- nginx 部署的小技巧
- #462 – 画一个外观更漂亮的GridSplitter(Drawing a Better Looking GridSplitter)
- tomcat7启动报taglib标签错误
- 绝对定位问题
- js冲突导致的问题