[转载]Android Layout标签之-viewStub,requestFocus,merge,include

定义Android Layout(XML)时,有四个比较特别的标签是非常重要的,其中有三个是与资源复用有关,分别是<viewStub/>, <requestFocus />, <merge /> and<include />。可是以往我们所接触的案例或者官方文档的例子都没有着重去介绍这些标签的重要性。

  • <viewStub  />: 此标签可以使UI在特殊情况下,直观效果类似于设置View的不可见性,但是其更大的(R)意义在于被这个标签所包裹的Views在默认状态下不会占用任何内存空间。viewStub通过include从外部导入Views元素。
    • 用法:通过android:layout来指定所包含的内容。默认情况下,ViewStub所包含的标签都属于visibility=GONE。viewStub通过方法inflate()来召唤系统加载其内部的Views。
      <ViewStub android:id="@+id/stub"
      android:inflatedId="@+id/subTree"
      android:layout="@layout/mySubTree"
      android:layout_width="120dip"
      android:layout_height="40dip" />
    • <include />:可以通过这个标签直接加载外部的xml到当前结构中,是复用UI资源的常用标签。
      • 用法:将需要复用xml文件路径赋予include标签的Layout属性。
        <include android:id="@+id/cell1" layout="@layout/ar01" />
        <include android:layout_width="fill_parent" layout="@layout/ar02" />
    • <requestFocus />: 标签用于指定屏幕内的焦点View。
      • 用法: 将标签置于Views标签内部 <!– Easy AdSenser V2.37 –><!– Post[count: 2] –>
        <EditText id="@+id/text"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_weight="0"android:paddingBottom="4"><requestFocus />
        </EditText>
    • <merge />:

单独将<merge />标签做个介绍,是因为它在优化UI结构时起到很重要的作用。目的是通过删减多余或者额外的层级,从而优化整个Android Layout的结构。

将通过一个例子来了解这个标签实际所产生的作用,这样可以更直观的了解<merge/>的用法。

建立一个简单的Layout,其中包含两个Views元素:ImageView和TextView 默认状态下我们将这两个元素放在FrameLayout中。其效果是在主视图中全屏显示一张图片,之后将标题显示在图片上,并位于视图的下方。以下是xml代码:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"><ImageViewandroid:layout_width="fill_parent"android:layout_height="fill_parent"android:scaleType="center"android:src="@drawable/golden_gate" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginBottom="20dip"android:layout_gravity="center_horizontal|bottom"android:padding="12dip"android:background="#AA000000"android:textColor="#ffffffff"android:text="Golden Gate" /></FrameLayout>

应用上边的Layout运行的视图为:

启动 tools> hierarchyviewer.bat工具查看当前UI结构视图:

layouttutorial_merge_01

layouttutorial_merge_02

我们可以很明显的看到由红色线框所包含的结构出现了两个framelayout节点,很明显这两个完全意义相同的节点造成了资源浪费(这里可以提醒大家在开发工程中可以习惯性的通过hierarchyViewer查看当前UI资源的分配情况),那么如何才能解决这种问题呢(就当前例子是如何去掉多余的frameLayout节点)?这时候就要用到<merge />标签来处理类似的问题了。我们将上边xml代码中的framLayout替换成merge:

<!– Easy AdSenser V2.37 –><!– Post[count: 2] –>

<merge xmlns:android="http://schemas.android.com/apk/res/android"><ImageViewandroid:layout_width="fill_parent"android:layout_height="fill_parent"android:scaleType="center"android:src="@drawable/golden_gate" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginBottom="20dip"android:layout_gravity="center_horizontal|bottom"android:padding="12dip"android:background="#AA000000"android:textColor="#ffffffff"android:text="Golden Gate" /></merge>

运行程序后在Emulator中显示的效果是一样的,可是通过hierarchyviewer查看的UI结构是有变化的,当初多余的 FrameLayout节点被合并在一起了,或者可以理解为将merge标签中的子集直接加到Activity的FrameLayout跟节点下(这里需要提醒大家注意:所有的Activity视图的根节点都是frameLayout)。如果你所创建的Layout并不是用framLayout作为根节点(而是应用LinerLayout等定义root标签),就不能应用上边的例子通过merge来优化UI结构。

layouttutorial_merge_03

除了上边的例子外,meger还有另外一个用法

当应用Include或者ViewStub标签从外部导入xml结构时,可以将被导入的xml用merge作为根节点表示,这样当被嵌入父级结构中后可以很好的将它所包含的子集融合到父级结构中,而不会出现冗余的节点。

另外有两点需要特别注意:

  • <merge />只可以作为xml layout的根节点。
  • 当需要扩充的xml layout本身是由merge作为根节点的话,需要将被导入的xml layout置于 viewGroup中,同时需要设置attachToRoot为True。(更多说明请参见inflate()文档)

转自:http://liangoogle.iteye.com/blog/1062639

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/302596.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

查询2021抚顺高考成绩,2021年抚顺高考状元是谁分数多少分,历年抚顺高考状元名单...

2020年抚顺一年一度的高考考试已经结束&#xff0c;今年抚顺高考状元是谁呢&#xff0c;抚顺高考状元出自哪个高中学校&#xff0c;文理科分数是多少分&#xff0c;一起来了解。一、2020年抚顺高考状元名单资料2020年抚顺高考状元名单和学校相关信息&#xff0c;截至目前发文时…

Android菜单详解——理解android中的Menu

前言 今天看了pro android 3中menu这一章&#xff0c;对Android的整个menu体系有了进一步的了解&#xff0c;故整理下笔记与大家分享。 PS&#xff1a;强烈推荐《Pro Android 3》&#xff0c;是我至今为止看到的最好的一本android书&#xff0c;中文版出到《精通Android 2》。 …

2021北京高考适应性测试成绩排名查询,2021届适应性考试学生成绩排名

1开启前照灯远光时仪表板上(如图所示)亮起。查看本题分析2在道路上跟车行驶时&#xff0c;跟车距离不是主要的&#xff0c;只须保持与前车相等的速度&#xff0c;即可防止发生追尾事故。查看本题分析3驾驶机动车在高速公路要按照限速标志标明的车速行驶。查看本题分析4这个标志…

.NET之Docker部署详细流程

开篇语自己从头开始走一遍docker部署.net的流程&#xff0c;作为一种学习总结&#xff0c;以及后续会写一些在该基础之上的文章。本次示例环境&#xff1a;vs2019、net5、docker、postman创建项目本次事例代码是用过vs2019创建的ASP.NET Core Web API项目image.png目标框架是.N…

平凡而又神奇的贝叶斯方法

全世界有3.14 % 的人已经关注了数据与算法之美概率论只不过是把常识用数学公式表达了出来。 ——拉普拉斯记得读本科的时候&#xff0c;最喜欢到城里的计算机书店里面去闲逛&#xff0c;一逛就是好几个小时&#xff1b;有一次&#xff0c;在书店看到一本…

d.ts文件可以注释html吗,如何编写一个d.ts文件的步骤详解_旧店_前端开发者

前言本文主要讲怎么写一个typescript的描述文件(以d.ts结尾的文件名&#xff0c;比如xxx.d.ts)。最近开始从之前也从网上面也找了一些资料&#xff0c;但还是看的云里雾里模糊不清&#xff0c;经过一段摸索&#xff0c;将摸索的结果记录下来&#xff0c;也希望可以给别人一个参…

function里面可以写function吗_氨基酸可以和蜂蜜一起喝吗?蜂蜜里面有氨基酸吗?...

氨基酸可以和蜂蜜一起喝吗?蜂蜜里面有氨基酸吗?氨基酸是我们人体不可或缺的营养物质&#xff0c;那氨基酸这种物质是否可以搭配蜂蜜一同食用?不少朋友都存在类似的疑惑&#xff0c;氨基酸会对蜂蜜产生不良的影响吗?其实&#xff0c;蜂蜜中本身也包含不少的氨基酸&#xff0…

通过Dapr实现一个简单的基于.net的微服务电商系统(九)——一步一步教你如何撸Dapr之OAuth2授权-百度版...

目录&#xff1a;一、通过Dapr实现一个简单的基于.net的微服务电商系统二、通过Dapr实现一个简单的基于.net的微服务电商系统(二)——通讯框架讲解三、通过Dapr实现一个简单的基于.net的微服务电商系统(三)——一步一步教你如何撸Dapr四、通过Dapr实现一个简单的基于.net的微服…

各自用一句话来概括MVC、MVP、MVVM的差异特点

MVC&#xff1a; 用户的请求首先会到达Controller&#xff0c;由Controller从Model获取数据&#xff0c;选择合适的View&#xff0c;把处理结果呈现到View上&#xff1b; MVP&#xff1a; 用户的请求首先会到达View&#xff0c;View传递请求到特定的Presenter&#xff0c;Pre…

不用“背”单词,1个方法牢记7000单词:我是如何做到的?

全世界有3.14 % 的人已经关注了数据与算法之美上个月30号&#xff0c;我怀着忐忑的心情&#xff0c;再次打开了 词汇量测试网站。当我看到词汇量达到7190的时候&#xff0c;非常兴奋。以至于带着怀疑的态度测了第二次&#xff1a;7260。7000的词汇量是怎样的一个程度呢&#xf…

VS2005~VS2022,那些年用过的VS,致敬,青春!

微软在开发者博客上宣布了一则重磅消息 —— 众所期待的 Visual Studio 2022 开发工具包即将全面拥抱 64-bit&#xff0c;并将于今夏推出首个公共预览版本。笔者第一次接触的VS版本还是2005&#xff0c;那时候还在上大三&#xff0c;一眨眼的功夫&#xff0c;现在都VS2022了&am…

Cowboy 源码分析(十八)

在上一篇中&#xff0c;我们整理了下cowboy_http_protocol:header/3函数&#xff0c;在文章的末尾留下2个没有讲到的函数&#xff0c;今天&#xff0c;我们先看下cowboy_http_protocol:error_terminate/2函数&#xff0c;另一个函数下一篇&#xff0c;我们再看。cowboy_http_pr…

符合语言习惯的 Python 优雅编程技巧

Python最大的优点之一就是语法简洁&#xff0c;好的代码就像伪代码一样&#xff0c;干净、整洁、一目了然。要写出 Pythonic&#xff08;优雅的、地道的、整洁的&#xff09;代码&#xff0c;需要多看多学大牛们写的代码&#xff0c;github 上有很多非常优秀的源代码值得阅读&a…

compress后的bytearray再decode变大_笔记本电脑风扇噪音变大的原因及其解决办法

笔记本使用时间长了之后&#xff0c;风扇声音会变大&#xff0c;那么如何再把风扇声音变小呢&#xff1f;怎么减小笔记本风扇的噪音&#xff1f;是什么原因导致笔记本风扇声音变大&#xff1f;下面给大家介绍笔记本风扇声音变大的原因及其解决办法。原因&#xff1a;1、使用时间…

ML.NET 示例:对象检测-ASP.NET Core Web和WPF桌面示例

ML.NET 版本API 类型状态应用程序类型数据类型场景机器学习任务算法v1.5.0动态API最新端到端应用图像文件对象检测深度学习ONNX: Tiny YOLOv2 & Custom Vision问题对象检测是计算机视觉中的经典问题之一&#xff1a;识别给定图像中包含哪些对象以及它们在图像中的位置。对于…

120天的烧脑只为孩子设计一套教具~

小木研究了适合儿童学习计算机知识的书真的挺多&#xff0c;但是小木要推荐的这本真的是很接地气了&#xff0c;不管是热衷于研究技术的小机灵还是一说计算机逻辑就懵的小可爱们&#xff0c;看到这本萌萌哒电脑漫游记&#xff0c;都会忍不住对计算机越来越感兴趣。它深入浅出&a…

# 睡眠3秒_【for fun】睡眠排序算法

点击上方蓝字关注我&#xff0c;我们一起学编程有任何疑问或者想看的内容&#xff0c;欢迎私信前天我们一起看了猴子排序&#xff0c;今天我们再来看一个奇葩的排序方法&#xff1a;睡眠排序。所谓睡眠排序&#xff0c;就是为待排序数组的每一个元素 x 启动一个线程&#xff0c…

将U盘虚拟成软驱加载控制器驱动安装windows server 2003

转自: http://dengweihua1.blog.51cto.com/134932/293221仅支持9G&#xff0c;10G安装windows2003使用该软件后&#xff0c;U盘的数据会丢失&#xff01;使用该软件后&#xff0c;U盘将无法被Windows系统使用,恢复U盘在最下边。u 安装前的准备&#xff1a; 1. 按F2进入BIOS&…

超级智能玩具《小小机器人》首发|全新50种玩法,创造力之源

致砖《小小机器人》套装全新首发电动机械的完美结合先来看看视频过过眼瘾吧来自美国STEAM教育让孩子跨学科学知识积木向来是STEAM教育很重要的一部分&#xff0c;因为它涉及到了多种学科&#xff1a;要搭建得稳固——这是工程学&#xff1b;要精准搭建——这是数学&#xff1b;…

.NET Core with 微服务 - 什么是微服务

微服务是这几年最流行的架构&#xff0c;说起架构不提微服务都不好意思跟人家打招呼。最近想要再梳理一下关于微服务的知识&#xff0c;并且结合本人的一些实践经验来做一些总结与分享。前面会分享一些概念性的东西&#xff0c;后面也会使用.net来实践&#xff0c;一步步完成一…