在android布局中使用include和merge标签
在我们开发Android布局时,经常会有很多的布局是相同的,这个时候我们可以通过<include/>和<merge/>标签实现将复杂的布局包含在需要的布局中,减少重复代码的编写。
1. 创建一个可以重复使用的布局:
如下代码描述在应用中每个acitivity都出现的顶栏titlebar.xml
- <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width=”match_parent”
- android:layout_height="wrap_content"
- android:background="@color/titlebar_bg">
- <ImageView android:id="@+id/title"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:src="@drawable/gafricalogo" />
- </FrameLayout>
上面的根布局(root view)即frameLayout会出现在之后插入的地方。
2. 使用<include/>标签:
在应用中的一个activity的布局中顶栏就是如上的布局,那么我们就可以include上面的titlebar.xml达到复用的效果,布局代码如下
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width=”match_parent”
- android:layout_height=”match_parent”
- android:background="@color/app_bg"
- android:gravity="center_horizontal">
- <include android:id="@+id/new_title"
- layout="@layout/titlebar"/>
- <TextView android:layout_width=”match_parent”
- android:layout_height="wrap_content"
- android:text="@string/hello"
- android:padding="10dp" />
- ...
- </LinearLayout>
通过取得元素的id,我们可以修改include标签中元素的属性,下面的例子为在actiivty中修改titlebar中的图片:
- private View mTitleBar = null;
- private ImageView mTitleImageView = null;
- mTitleBar = findViewById(R.id.new_title);
- mTitleImageView = (ImageView)mTitleBar.findViewById(R.id.title);
- mTitleImageView.setImageResource(R.drawable.logo);
在使用include标签时,我们可以覆写插入布局root view的属性(所有的android:layout_*属性)
- <include android:id=”@+id/news_title”
- android:layout_width=”match_parent”
- android:layout_height=”match_parent”
- layout=”@layout/title”/>
如果需要覆写插入布局root view的属性,则必须制定android:layout_width和android:layout_height这两个属性以使其它的覆写属性生效。
3. 使用<merge/>标签
merge标签用来消除我们在include一个布局到另一个布局时所产生的冗余view group。比如现在很多布局中会有两个连续的Button,于是我们将这两个连续的Button做成可复用布局(re-usable layout)。在使用include标签时我们必须先将这两个Button用一个view group比如LinearLayout组织在一起然后供其它布局使用,如果是include的地方也是LiearLayout就会造成有两层连续的LiearLayout,除了降低UI性能没有任何好处。这个时候我们就可以使用<merge/>标签作为可复用布局的root view来避免这个问题。
- <merge xmlns:android="http://schemas.android.com/apk/res/android">
- <Button
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="@string/add"/>
- <Button
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="@string/delete"/>
- </merge>
当我们用<include/>标签复用上述代码时,系统会忽略merge元素,直接将两个连续的Button放在<include/>标签所在处。
在android布局中使用include和merge标签相关推荐
- android布局中使用include及需注意点
在android布局中,使用include,将另一个xml文件引入,可作为布局的一部分,但在使用include时,需注意以下问题:一.使用include引入如现有标题栏布局block_header.x ...
- Android布局优化之include、merge、ViewStub
include:引入重复使用的相同布局 merge:减少include布局的层级,将子元素直接添加到merge标签的parent中 ViewStub:其实就是一个宽高都为0的一个View,它默认是不可 ...
- android layout include merge,Android 布局优化之include与merge
Android 官方提供了三个用来优化布局的标签,分别是include.merge与ViewStub,其中ViewStub是动态加载视图到内存,大家可以查阅:Android UI布局优化之ViewSt ...
- Android布局文件之 include 详细介绍
Android布局文件之 include 详细介绍 include简介 众所周知,include就是在一个布局中,导入另一个布局文件. 优势是:相同的页面只需写一次,提高了共通布局的复用性. 下面我们 ...
- android 布局 站位符,基于android布局中的常用占位符介绍
大家在做布局文件是肯定会遇到过下面的这种情况 填充出现问题,所以需要用到占位符规范填充 汉字常用占位符: android:layout_width="wrap_content" a ...
- Android布局中的空格以及占一个汉字宽度的空格的实现
在Android布局中进行使用到空格,以便实现文字的对齐.那么在Android中如何表示一个空格呢? 空格: 窄空格: 一个汉字宽度的空格: [用两个空格( )占一个汉字的宽度时,两个空格比一 ...
- android 多个占位符,基于android布局中的常用占位符介绍
大家在做布局文件是肯定会遇到过下面的这种情况 填充出现问题,所以需要用到占位符规范填充 汉字常用占位符: android:layout_width="wrap_content" a ...
- 详解Android布局中gravity与layout_gravity属性
在android布局中,我们经常会用到"重心"-gravity这个属性.但是gravity有不同的类型: gravity layout_gravity 相对布局中的layout_c ...
- Android布局中margin与padding的区别
我们知道Android开发不仅仅有代码的动态控制,而且还涉及到布局的静态搭建(xml).几乎在每一个xml文件中,我们总会看到margin和padding这两个属性,今天让我们初步探究一下它们之间的区 ...
最新文章
- 10大机器学习开源项目推荐(Github平均star为1385)
- 构建之法读书笔记之五
- JavaWeb学习之Spring框架(一)
- java 安装报错2503_Windows安装Node.js报错:2503、2502的解决方法
- 在tnsnames.ora中配置监听
- Node.js中的回调解析
- Chapter9:顺序容器
- 前端学习(1736):前端系列javascript之创建webpack与loader使用
- Java Server Page
- kaggle比赛语言java_Kaggle调查:2018年数据科学家最常用(和最推荐)的编程语言榜单...
- 3 天开发物联网应用!腾讯云 IoT 超级小程序来了
- AtCoder Beginner Contest 132 解题报告
- 学习是一件高尚而孤独的事情
- hbase 使用lzo_【hbase】Hbase最佳实践
- javascript延时调用函数
- python二级题库(百分之九十原题) 刷题软件推荐 第二套
- iOS 中可能用到的数学公式(绝对值、平方、取整、正余弦)
- 不可重复读和幻读的区别(悲观锁和乐观锁)
- java动态规划凑硬币问题_动态规划 凑硬币问题
- 有些人的微信字体可以变成蓝色,点进去就可以知道答案,这是为什么呢?
热门文章
- netcore权限控制_记录这两年是如何一步一步转型到.net core+k8s
- python中的1怎么用的_python中的[:-1]和[::-1]的具体使用
- mybatis-plus 多列映射成数组_JavaScript 为什么需要类数组
- vue 监听表格里的数据变化_vue中监听数据变化 watch
- illegalargumentexception是什么异常_线程出现异常!应该如何处理?
- 中国文学发展史思维导图
- ANACONDA安装pytorch后Pycharm无法识别到解释器
- VMware卸载虚拟机
- 计算机科技协会竞选书,加入计算机协会申请书
- 自动化运维之CentOS7下PXE+Kickstart+DHCP+TFTP+HTTP无人值守安装系统