1、布局重用<include />

<include />标签能够重用布局文件,使用起来非常简单

<include layout="@layout/layoutname"/> 

1)<include />标签可以使用单独的layout属性,这个也是必须使用的。

2)可以使用其他属性。<include />标签若指定了ID属性,而你的layout也定义了ID,则你的layout的ID会被覆盖。

3)在include标签中所有的android:layout_*都是有效的,前提是必须要写layout_width和layout_height两个属性。

4)布局中可以包含两个相同的include标签,引用时可以使用如下方法解决(参考)

View bookmarks_container_2 = findViewById(R.id.bookmarks_favourite); bookmarks_container_2.findViewById(R.id.bookmarks_list);

2、减少视图层级<merge />

<merge/>标签在UI的结构优化中起着非常重要的作用,它可以删减多余的层级,优化UI。<merge/>多用于替换FrameLayout或者当一个布局包含另一个时,<merge/>标签消除视图层次结构中多余的视图组。例如你的主布局文件是垂直布局,引入了一个垂直布局的include,这是如果include布局使用的LinearLayout就没意义了,使用的话反而减慢你的UI表现。这时可以使用<merge/>标签优化。

3、需要时使用<ViewStub />

<ViewStub />标签最大的优点是当你需要时才会加载,使用他并不会影响UI初始化时的性能。各种不常用的布局想进度条、显示错误消息等可以使用<ViewStub />标签,以减少内存使用量,加快渲染速度。<ViewStub />是一个不可见的,大小为0的View。<ViewStub />标签使用如下:

<ViewStubandroid:id="@+id/stub_import"android:inflatedId="@+id/panel_import"android:layout="@layout/progress_overlay"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_gravity="bottom" />

当你想加载布局时,可以使用下面其中一种方法:

((ViewStub) findViewById(R.id.stub_import)).setVisibility(View.VISIBLE);
// or
View importPanel = ((ViewStub) findViewById(R.id.stub_import)).inflate();

当调用inflate()函数的时候,ViewStub被引用的资源替代,并且返回引用的view。 这样程序可以直接得到引用的view而不用再次调用函数findViewById()来查找了。
注:ViewStub目前有个缺陷就是还不支持 <merge /> 标签。

更多<ViewStub />标签介绍可以参考《Android Layout Tricks #3: Optimize with stubs》

转载于:https://www.cnblogs.com/six-moon/p/4651200.html

【Android学习】三种布局include /、merge /、ViewStub /相关推荐

  1. 请写出3个Android布局,一起撸一波干货集中营练练手Android(三)布局+实现篇

    MPGankIO 布局篇 整个App到了这里就开始准备开始实现逻辑啦,有没有点小期待 后续如果有需要可以爬一波包包通缉令的数据O(∩_∩)O~~ 我们的布局采用5.0之后的新布局控件 1.CardVi ...

  2. WordPress自适应白天暗夜无刷新加载三种布局模板源码

    一款基于Wordpress开发的高颜值的自适应主题,支持白天与黑夜模式.首页支持三种布局:博客风格,cms风格,企业风格 主题特性: 支持白天与暗黑模式 全局无刷新加载 支持博客与CMS布局 内置WP ...

  3. Android之Android Studio三种方式导入外部资源 以及 报错处理

    Android Studio三种方式导入外部资源 以及 报错处理 android studio提供了三种方式导入外部资源: 1. Library dependency – 在线添加.需联网下载 . 2 ...

  4. Android的三种网络联接方式(URL / HttpURLConnection | HttpClient | InetAddress )

    Android SDK 中一些与网络有关的package,如下: 包描述 java.net 提供与联网有关的类,包括流和数据包(datagram)sockets.Internet 协议和常见 HTTP ...

  5. 2022-05-14 Git三种合并分支Merge、Squash merge、Rebase merge

    Git三种合并分支Merge.Squash merge.Rebase merge 前言 合并分支 Merge Rebase merge Squash merge 前言 开发过程中,一般按照Git Fl ...

  6. 2048经典版震撼来袭,多种游戏模式,三种布局,来迎接挑战吧!

    2048经典版震撼来袭,多种游戏模式,三种布局(3*3.4*4.5*5),两种风格(厚重.灵巧),来迎接挑战吧! appstore下载地址:https://itunes.apple.com/cn/ap ...

  7. WordPress自适应白天暗夜高颜值无刷新加载首页支持三种布局 v2.4

    一款基于WordPress开发的高颜值的自适应主题,支持白天与黑夜模式.首页支持三种布局:博客风格,cms风格,企业风格 主题特性 支持白天与暗黑模式 全局无刷新加载 支持博客与CMS布局 内置WP优 ...

  8. html页面布局是什么意思,html布局的常见类型有哪些?html的三种布局特点分析

    html布局的常见类型有哪些?html中的布局方式有三种:流动布局.浮动布局以及层模型,html的这三种布局各有个的特点,本篇文章就给大家简单的说说html的三种布局方式的特点. 1.流动布局(htm ...

  9. android 计时器 三种,Android计时器的三种实现方式(Chronometer、Timer、handler)

    本文实例为大家分享了Android计时器的三种方法,具体内容如下 目录: 1.借助Timer实现 2.调用handler.sendMessagedely(Message msg, long delay ...

最新文章

  1. Python3编码与转码
  2. asp.net 2.0中新增的AppendDataBoundItems
  3. python pyusb库使用教程【在window10系统上操作USB】(操作Intel Realsense D435)
  4. Davinci DM6446开发攻略-UBOOT-2009.03移植2 nand flash的烧写
  5. (转)LinqToSql的连接字符串自动调用配置文件中的连接字符串
  6. 安装Rational Enterprise Suite(Robot...)时遇到的问题及解决办法!
  7. 华为交换机vlan配置
  8. 那些年伴我一起成长的SAP装备
  9. python里while的用法_Python学习笔记之While循环用法分析
  10. [转]将input file的选择的文件清空
  11. oracle修改字段的默认,oracle系统默认的账号ORACLE修改表字段的数据类型
  12. AutoLISP恢复系统变量到默认值
  13. 【机器学习 基本概念】马尔可夫链
  14. linux dm9000网卡驱动,ARM-Linux驱动--DM9000网卡驱动分析(三)
  15. 3d打印技术是计算机在哪一方面的应用,3D打印技术的应用范围 3D打印技术的应用领域有哪些?...
  16. 使用python查找重复值
  17. python实现pearson相关性检验
  18. 怎么下载网页在线视频
  19. HTML入门学习线路图
  20. XtraReport绑定数据源的三种方式

热门文章

  1. java抛异常 代替返回_Java使用和C++类似的异常处理
  2. java 类加载器卸载,【深入明白Java虚拟机 】类加载器的命名空间以及类的卸载...
  3. java文件虚拟路径_java虚拟路径的总结
  4. python编程 书籍_Python编程十大最佳书籍
  5. java实现lru缓存_Java中的LRU缓存实现
  6. 使用Kotlin的Android菜单
  7. java 数字 下划线_数字文字中的下划线– Java 7功能
  8. C# 调用word时,禁用宏
  9. WinForm XML
  10. 二维码编解码 Java调用示例代码