本文截选自《Android开发权威指南》
在4.5.6节介绍过一个<include>标签,该标签可以在布局文件中引用另外一个布局文件,并可以覆盖被引用布局文件根节点所有与布局相关的属性,也就是以android:layout开头的属性。通过<include>标签可以将一个非常庞大的布局文件分解成若干个较小的布局文件,而且这些小的布局文件也可以被多次引用,从而达到一个重用的目的。
<include>标签固然很好用,但有一个问题,就是布局文件中的控件并不一定在程序启动时全都用到,有一些控件只在特定的情况下才会被使用到。例如,一个阅读图书的软件只有在下载电子书时才需要显示进度条,在平时看书时都是装载的本地电子书,并不需要使用进度条。因此,在程序启动时完全可以先不加载这个进度条。但使用<include>标签引用这个包含进度条的布局文件时,不管三七二十一,将所有的控件全部装载到了内存中。也许有的读者会说,一个进度条占用不了多少系统资源,都装载也无所谓。这些读者也许是对的,但如果装载的不是进度条,而是很多ImageView控件(显示了很大的图像),并且还不是在一个地方装载,那恐怕就会将可怜的手机资源消耗殆尽了。因此,我们急需一种机制来改变<include>标签的这种行为,只在需要时装载控件。这种机制就是本节要介绍的ViewStub控件。
ViewStub是不可视的控件,它的作用与<include>标签基本相同,在布局文件中使用<ViewStub>标签来引用其他的布局文件。但与<include>唯一的不同是ViewStub并不会马上装载引用的布局文件。只有在调用了ViewStub.inflate或ViewStub.setVisibility(View.VISIBLE)方法后,ViewStub才会装载引用的控件,下面先看两个布局文件。
main.xml
<?xml version="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"android:layout_width="fill_parent"
android:layout_height="fill_parent">
<Button android:layout_width="fill_parent"
android:layout_height="wrap_content" android:text="我的按钮"
android:onClick="onClick_Button" />
<includelayout="@layout/custom" />
</LinearLayout>
custom.xml
<?xml version="1.0"encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"android:layout_width="fill_parent"
android:layout_height="fill_parent">
<Buttonandroid:layout_width="fill_parent"
android:layout_height="wrap_content" an droid:text="按钮1" />
<Buttonandroid:layout_width="fill_parent"
android:layout_height="wrap_content" android:text="按钮2" />
</LinearLayout>
在main.xml文件中使用了<include>标签来引用custom.xml,在这种情况下,屏幕上会立即显示三个如图5.56所示的按钮。如果将<include>标签换成如下的代码,在程序启动时,只会显示在main.xml文件中的定义按钮,如图5.57所示。
<ViewStub android:id="@+id/viewstub"android:inflatedId="@+id/button_layout"
android:layout="@layout/custom"android:layout_width="fill_parent"
android:layout_height="wrap_content" />
}
}
单击“我的按钮”后,会显示在custom.xml文件中定义的两个按钮,效果与图5.56完全一样。
注意:<ViewStub>与<include>标签一样,也可以设置所引用布局文件中根节点所有与布局相关的属性。所不同的是<include>标签的android:id属性直接覆盖了所引用布局文件中根节点的android:id属性值,而<ViewStub>标签的android:id属性与普通控件标签的android:id属性一样,用于在代码中引用控件。在<ViewStub>标签中需要使用android:inflatedId属性覆盖所引用布局文件中根节点的android:id属性值。虽然<ViewStub>可完全取代<include>,但唯一的不足是<ViewStub>目前还无法取代<merge>
转自:http://www.2cto.com/kf/201110/108620.html
相关推荐
ViewStub的设计理念是实现控件的惰性装载,即在需要时才加载和初始化视图,而不是在应用启动时一次性加载所有布局。这在处理大型布局或者有多个可选组件的情况下尤其重要。 在传统的布局文件中,如使用标签,会将被...
6.29 ViewStub惰性装载控件 6.30 ViewPager多页面滑动效果一 6.31 ViewPager多页面滑动效果二 6.32 ListView普通列表控件的使用 6.33 适配器结合ListView控件的使用 七、百度地图实战开发 7.1 百度地图搭建开发环境...
计算机二级算法重点.doc
【目标检测】脚印检测数据集819张YOLO+VOC.docx
网络广告的现状及未来发展.docx
【目标检测】12种家具家电检测数据集7656张YOLO+VOC格式.docx
电大C语言程序设计期末考试试题A.doc
网络营销测试试卷.docx
自学考试管理系统中的计算机应用试题和答案.doc
西南大学网络与继续教育学院课程考试试题汽车文化.doc
电子商务系统分析与设计开发技术.doc
江苏省中小学教师健康知识网络竞赛含答案.doc
计算机系统集成项目经理聘用协议书.doc
电大操作系统本期末复习材料新版.doc
内容概要:本文档详细介绍了MySQL 8.0版本的安装与配置流程,包括下载、安装、环境配置以及环境变量的设置。首先,介绍了MySQL的下载方式,区分了在线安装和离线安装的特点,并推荐离线安装。接着,逐步讲解了安装过程中不同安装类型的选项,如开发者默认、仅服务器、仅客户端、完整安装和自定义安装,并重点描述了自定义安装的步骤,包括选择版本、设置安装路径和数据存储路径、配置环境(对于未安装环境的计算机)、安装MySQL、选择网络类型、设置身份验证方法和密码。最后,指导用户配置环境变量,并提供了检查环境变量配置是否成功的具体方法。 适合人群:适合初次接触MySQL数据库的用户,尤其是需要在本地计算机上搭建MySQL环境的学习者或开发者。 使用场景及目标:①帮助用户从零开始搭建MySQL 8.0环境,适用于个人学习或小型项目开发;②确保用户能够顺利完成MySQL的安装与配置,掌握基本的操作技能;③为后续深入学习MySQL提供必要的基础支持。 阅读建议:由于安装过程涉及多个步骤,建议读者按照文档中的顺序逐步操作,遇到问题时仔细检查每一步的设置是否正确,同时注意根据自己的实际需求选择合适的安装类型和配置选项。
要服务委托协议服务网络覆盖区域.docx
秋东财建设工程项目管理在线作业二参考答案.docx
微信自定义表情包导出功能,python
秋季电大湖南省开课程网络形考电子商务概论第二次作业分答案至章.doc