【Android学习】三种布局include /、merge /、ViewStub /
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 /相关推荐
- 请写出3个Android布局,一起撸一波干货集中营练练手Android(三)布局+实现篇
MPGankIO 布局篇 整个App到了这里就开始准备开始实现逻辑啦,有没有点小期待 后续如果有需要可以爬一波包包通缉令的数据O(∩_∩)O~~ 我们的布局采用5.0之后的新布局控件 1.CardVi ...
- WordPress自适应白天暗夜无刷新加载三种布局模板源码
一款基于Wordpress开发的高颜值的自适应主题,支持白天与黑夜模式.首页支持三种布局:博客风格,cms风格,企业风格 主题特性: 支持白天与暗黑模式 全局无刷新加载 支持博客与CMS布局 内置WP ...
- Android之Android Studio三种方式导入外部资源 以及 报错处理
Android Studio三种方式导入外部资源 以及 报错处理 android studio提供了三种方式导入外部资源: 1. Library dependency – 在线添加.需联网下载 . 2 ...
- Android的三种网络联接方式(URL / HttpURLConnection | HttpClient | InetAddress )
Android SDK 中一些与网络有关的package,如下: 包描述 java.net 提供与联网有关的类,包括流和数据包(datagram)sockets.Internet 协议和常见 HTTP ...
- 2022-05-14 Git三种合并分支Merge、Squash merge、Rebase merge
Git三种合并分支Merge.Squash merge.Rebase merge 前言 合并分支 Merge Rebase merge Squash merge 前言 开发过程中,一般按照Git Fl ...
- 2048经典版震撼来袭,多种游戏模式,三种布局,来迎接挑战吧!
2048经典版震撼来袭,多种游戏模式,三种布局(3*3.4*4.5*5),两种风格(厚重.灵巧),来迎接挑战吧! appstore下载地址:https://itunes.apple.com/cn/ap ...
- WordPress自适应白天暗夜高颜值无刷新加载首页支持三种布局 v2.4
一款基于WordPress开发的高颜值的自适应主题,支持白天与黑夜模式.首页支持三种布局:博客风格,cms风格,企业风格 主题特性 支持白天与暗黑模式 全局无刷新加载 支持博客与CMS布局 内置WP优 ...
- html页面布局是什么意思,html布局的常见类型有哪些?html的三种布局特点分析
html布局的常见类型有哪些?html中的布局方式有三种:流动布局.浮动布局以及层模型,html的这三种布局各有个的特点,本篇文章就给大家简单的说说html的三种布局方式的特点. 1.流动布局(htm ...
- android 计时器 三种,Android计时器的三种实现方式(Chronometer、Timer、handler)
本文实例为大家分享了Android计时器的三种方法,具体内容如下 目录: 1.借助Timer实现 2.调用handler.sendMessagedely(Message msg, long delay ...
最新文章
- Python3编码与转码
- asp.net 2.0中新增的AppendDataBoundItems
- python pyusb库使用教程【在window10系统上操作USB】(操作Intel Realsense D435)
- Davinci DM6446开发攻略-UBOOT-2009.03移植2 nand flash的烧写
- (转)LinqToSql的连接字符串自动调用配置文件中的连接字符串
- 安装Rational Enterprise Suite(Robot...)时遇到的问题及解决办法!
- 华为交换机vlan配置
- 那些年伴我一起成长的SAP装备
- python里while的用法_Python学习笔记之While循环用法分析
- [转]将input file的选择的文件清空
- oracle修改字段的默认,oracle系统默认的账号ORACLE修改表字段的数据类型
- AutoLISP恢复系统变量到默认值
- 【机器学习 基本概念】马尔可夫链
- linux dm9000网卡驱动,ARM-Linux驱动--DM9000网卡驱动分析(三)
- 3d打印技术是计算机在哪一方面的应用,3D打印技术的应用范围 3D打印技术的应用领域有哪些?...
- 使用python查找重复值
- python实现pearson相关性检验
- 怎么下载网页在线视频
- HTML入门学习线路图
- XtraReport绑定数据源的三种方式
热门文章
- java抛异常 代替返回_Java使用和C++类似的异常处理
- java 类加载器卸载,【深入明白Java虚拟机 】类加载器的命名空间以及类的卸载...
- java文件虚拟路径_java虚拟路径的总结
- python编程 书籍_Python编程十大最佳书籍
- java实现lru缓存_Java中的LRU缓存实现
- 使用Kotlin的Android菜单
- java 数字 下划线_数字文字中的下划线– Java 7功能
- C# 调用word时,禁用宏
- WinForm XML
- 二维码编解码 Java调用示例代码