虽然 Android 提供很多小的可重用的交互组件,你仍然可能需要重用复杂一点的组件,这也许会用到 Layout。为了高效重用整个的 Layout,你可以使用 <include/> 和 <merge/> 标签把其他 Layout 嵌入当前 Layout。

重用 Layout 非常强大,它让你可以创建复杂的可重用 Layout。比如,一个 yes/no 按钮面板,或者带有文字的自定义进度条。这也意味着,任何在多个 Layout 中重复出现的元素可以被提取出来,被单独管理,再添加到 Layout 中。所以,虽然可以添加一个自定义 View 来实现单独的 UI 组件,你可以更简单的直接重用某个 Layout 文件。

创建可重用 Layout

如果你已经知道你需要重用的 Layout,就先创建一个新的 XML 文件并定义 Layout 。比如,以下是一个来自 G-Kenya codelab 的 Layout,定义了一个需要添加到每个 Activity 中的标题栏(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:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/gafricalogo" />

</FrameLayout>
根节点 View 就是你想添加入的 Layout 类型。

使用<include>标签

使用 <include> 标签,可以在 Layout 中添加可重用的组件。比如,这里有一个来自 G-Kenya codelab 的 Layout 需要包含上面的那个标题栏:

<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 layout="@layout/titlebar"/><TextView android:layout_width=”match_parent”android:layout_height="wrap_content"android:text="@string/hello"android:padding="10dp" />...

</LinearLayout>
你也可以覆写被添加的 Layout 的所有 Layout 参数(任何 android:layout_* 属性),通过在 <include/> 中声明他们来完成。比如:

<include android:id="@+id/news_title"

     android:layout_width="match_parent"android:layout_height="match_parent"layout="@layout/title"/>

然而,如果你要在 <include> 中覆写某些属性,你必须先覆写 android:layout_height 和 android:layout_width。

使用<merge>标签

<merge /> 标签在你嵌套 Layout 时取消了 UI 层级中冗余的 ViewGroup 。比如,如果你有一个 Layout 是一个竖直方向的 LinearLayout,其中包含两个连续的 View 可以在别的 Layout 中重用,那么你会做一个 LinearLayout 来包含这两个 View ,以便重用。不过,当使用一个 LinearLayout 作为另一个 LinearLayout 的根节点时,这种嵌套 LinearLayout 的方式除了减慢你的 UI 性能外没有任何意义。

为了避免这种情况,你可以用 <merge> 元素来替代可重用 Layout 的根节点。例如:

<merge xmlns:android="http://schemas.android.com/ap...;>

<Buttonandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:text="@string/add"/><Buttonandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:text="@string/delete"/>

</merge>
现在,当你要将这个 Layout 包含到另一个 Layout 中时(并且使用了 <include/> 标签),系统会忽略 <merge> 标签,直接把两个 Button 放到 Layout 中 <include> 的所在位置。

原文地址:http://www.apkbus.com/blog-92...

Android提高显示布局文件的性能,使用include标签重用layouts相关推荐

  1. 【Android Training - Performance】提高显示布局文件的性能[Lesson 3 - 按需载入视图(ViewStub的使用方法)]

    Loading Views On Demand [按需载入视图] 某些时候,我们需要一些很复杂的视图却仅仅很少用到.如果我们在它仅仅需要的时候再载入,这样可以减少内存的使用并且给用户带来流畅的体验. ...

  2. android怎么查看方法被谁调用,Android中查看布局文件中的控件(view,id)在哪里被调用(使用)...

    在阅读别人的代码时通常是很痛苦的,有时很想要看一看布局中的控件在哪里被调用了,为之很苦恼 在这里提供一种方法. 复制要查看的控件ID,到R文件中搜索到该ID, 接下来就好办的了,选中ID按下Ctrl鼠 ...

  3. Android中View绘制优化二一---- 使用include /标签复用布局文件

    本文原创, 转载请注明出处:http://blog.csdn.net/qinjuning 译二: 使用<include />标签复用布局文件  翻译地址:http://developer. ...

  4. Android优化——UI优化(二) 使用include标签复用布局

    使用include标签复用布局 - 1.include标签的作用 假如说我下图的这个布局在很多界面都用到了,我该怎么办?每个页面都写一遍的话,代码太冗余,并且维护难度加大. <LinearLay ...

  5. 【Android】安卓布局文件中xmlns属性

    定义及使用 xmlns是XML Namespaces的缩写,中文名称是XML(标准通用标记语言的子集)命名空间 自定义View的时候有时候会在布局文件中使用到 命名规则如下: xmlns:前缀=htt ...

  6. Android之解决布局文件图片太大同步放缩后挤掉其它布局的问题

    1.问题 局文件图片太大同步放缩后挤掉其它布局的问题 比如有个图片logo1.png,很大,在平板上图片布局写成这样 <ImageViewandroid:src="@drawable/ ...

  7. 设置Android Studio工程布局文件的默认布局

    每次创建新的工程后,布局文件的的布局总是ConstraintLayout,如何更改? 进入Android Studio安装目录,用文本编辑器打开文件plugins\android\lib\templa ...

  8. svg格式文件android,在Android中显示SVG文件

    我想创建一个在一些平面图上显示位置的应用程序.导航通过WiFi以某种方式实现,我已经做到了,所以现在我有一个显示平面图的问题. 它可能是一些矢量格式,互联网冲浪一段时间后,我决定它必须是svg文件. ...

  9. android自定义dialog布局文件,Android自定义Dialog及其布局

    实际项目开发中默认的Dialog无法满足需求,需要自定义Dialog及其布局,并响应布局中控件的事件. 上效果图: 自定义Dialog,LogoutDialog: 要将自定义布局传入构造函数中,才能在 ...

  10. Android笔记——在布局文件中插入另一个布局文件

    假如有一个布局文件A.xml想把另外一个布局文件B.xml引进其布局,则可以通过下面的代码 <include layout="@layout/B" /> 程序猿必读 转 ...

最新文章

  1. Selenium3自动化测试——4. 获取百度备案信息
  2. python中用来占位_python 占位符
  3. Android Telephony分析(六) ---- 接口扩展(实践篇)
  4. 遍历HashMap的最佳方法
  5. Java数组扩容算法及Java对它的应用
  6. python 计算器 tkinter_python -Tkinter 实现一个小计算器功能
  7. 区块链和数据科学:如果同时应用这两种技术,将会实现什么?
  8. 四川大学计算机学院2020推免公示,2020四川大学计算机学院推免夏令营通知
  9. 百度云开发clouda学习(一)
  10. 五年50起并购、股价持续上扬,复盘IBM的物联网进化之路
  11. 二维动画毕业论文参考文献精选
  12. Right-BICEP要求设计四则运算2
  13. AWS之Glue使用方法
  14. “稳定婚姻算法”雨夜谈-M/N资源匹配问题
  15. linux绝育玩客云_玩客云绝育,不影响下载功能
  16. IntelliJ IDEA 2018.2 x64激活
  17. pickel加速caffe读图
  18. 推荐几款很实用画图工具
  19. 【pyenv】解决 pyenv install 国内下载缓慢的问题
  20. Java入门:代码基础

热门文章

  1. atitit 解决教学记忆问题 压缩算法原理  哈夫曼 LZ77 gzip  zlib deflate算法.docx 目录 1. 压缩理论 1 1.1. 柯氏复杂性 1 2. 1 RLE 1
  2. Atitit webservice的发现机制 discover机制
  3. Atitit dsl实现(1)------异常的库模式实现  异常的ast结构
  4. GSM/GPRS MODEM 的上网设置
  5. 王川: 重要的东西, 往往是看不见的
  6. Rust: 为什么同样的情况,有时不需要解引用?
  7. OpenAnolis社区致Linux开发者的一封信
  8. 2020阿里云线上峰会预告 | 凌云时刻
  9. 用OpenStack构建“区域医疗”云平台
  10. 【粉丝福利】Logo评选投票,礼品赠送!