资讯专栏INFORMATION COLUMN

Android 布局巧用之include、merge、ViewStub

sushi / 1047人阅读

摘要:原文链接相信大家经常听到这样的标签,官方也提到这三种布局可用于布局的优化。今天就介绍下这三种布局的使用,记录下来,便于后续中的使用。比如中页面里某个布局只需要在特定的情况下才显示,其余情况下可以不用加载显示,这时候可以使用。

原文链接:https://mp.weixin.qq.com/s/bTA2gztUzqvqER2rz56RRQ

相信大家经常听到includemergeViewStub这样的标签,官方也提到这三种布局可用于布局的优化。今天就介绍下这三种布局的使用,记录下来,便于后续app中的使用。

include布局重用

app开发过程中,会遇到不同页面里有相同的布局,这时我们可以将这些通用的布局提取出来到一个多带带的layout文件里,再使用标签引入到相应的页面布局文件里,主要通过includelayout属性引用。
举个栗子
include的布局:




    

activity的布局:




    

    

这个标签在日常工作使用还是很常见的。这里有几点需要注意下:
1、如果给include标签 和 include所加载的布局 都添加id的话,那么id要保持一致,如例子中都是container,否则是在代码中获取不到RelativeLayout容器的。 当然我们可以避免这样的问题,只需要给其中一项添加id属性就可以。

2、include布局里元素的id 要和 include所在页面布局里的其他元素id 不同,如例子中的两个textview,如果把id设置相同了,程序运行起来并不会报错,但是textview的赋值只会赋值给其中的一个。

3、如果需要给include标签设置位置属性的话,如例子中的layout_belowlayout_marginTop,这时候 必须 同时设置include标签的宽高属性layout_widthlayout_height,否则编译器是会报错的。一般情况不需要设置include的其他属性,直接加载布局文件

4、布局中可以包含两个相同的include标签,如下代码所示 两个include都加载layout="@layout/include_layout"




    

    

    

可以设置不同include的id属性,引用的时候如下可以正常显示:

View view = findViewById(R.id.container2);
TextView textView = view.findViewById(R.id.tv);
textView.setText("这里是来自 第二个 include布局");
merge减少视图层级

merge标签可用于减少视图层级来优化布局,可以配合include使用,如果include标签的父布局 和 include布局的根容器是相同类型的,那么根容器的可以使用merge代替。
页面布局




    

    

先看没有使用merge的:




    

看下view层的结构:

再看使用了merge的:




    

view层结构:

可以看到对比,减少了一层的LinearLayout的嵌套,需要注意的是使用merge的布局,在include的标签设置距离属性没有生效,可以将一些间距属性设置到include布局里元素上,具体看项目需求使用。

ViewStub按需加载

按需加载 顾名思义需要的时候再去加载,不需要的时候可以不用加载,节约内存使用。通常情况我们会使用setVisibility方法来控制视图的显示和隐藏,但是这种情况视图已经加载了。
比如app中页面里某个布局只需要在特定的情况下才显示,其余情况下可以不用加载显示,这时候可以使用ViewStub
layout属性是需要加载布局




    

需要注意的是 ViewStubinflate()方法只能被调用一次,一旦调用后,ViewStub将从视图中移除,被对应的layout布局取代,同时会保留ViewStub上设置的属性效果。

ViewStub viewstub = findViewById(R.id.viewstub);
viewstub.inflate();

这篇关于includemergeViewStub的使用就介绍到这里了,具体使用情况还得视项目而定。

最后附上github地址https://github.com/taixiang/include

欢迎关注我的博客:https://blog.manjiexiang.cn/
更多精彩欢迎关注微信号:春风十里不如认识你

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/2993.html

相关文章

  • Android 布局用之includemergeViewStub

    摘要:原文链接相信大家经常听到这样的标签,官方也提到这三种布局可用于布局的优化。今天就介绍下这三种布局的使用,记录下来,便于后续中的使用。比如中页面里某个布局只需要在特定的情况下才显示,其余情况下可以不用加载显示,这时候可以使用。 原文链接:https://mp.weixin.qq.com/s/bTA2gztUzqvqER2rz56RRQ 相信大家经常听到include、merge、Vie...

    luoyibu 评论0 收藏0
  • Android布局优化三剑客

    摘要:要解决这些痛点,我们可以请布局优化三剑客出码,它们分别是和三个标签,现在我们就来认识认识它们吧。此时如果想要再次显示布局,可以调用方法。通过监听的填充事件声明一个布尔值变量,默认值为,布局填充成功之后,在监听事件方法中将其置为。 前言 在编写Android布局时总会遇到这样或者那样的痛点,比如: 有些布局的在很多页面都用到了,而且样式都一样,每次用到都要复制粘贴一大段,有没有办法可以...

    alaege 评论0 收藏0
  • 性能优化1--UI优化

    摘要:若指定了其他的的这种属性,则和必须存在。否则其他的无法生效按需加载标签和标签很相似,都是使用属性来加载一个布局。提高了程序性能。其实这种说法是错误的。减少布局层数标签用来取消的层级的显示。1.使用系统为我们提供了几个抽象的标签 ①include:重用 include中layout属性指定一个外部布局文件,通过该方式则不需要把这个布局文件在该代码中重复的写一遍了。 若include指定了...

    tomorrowwu 评论0 收藏0
  • Android 性能优化之减少UI过度绘制

    摘要:过度绘制最直观的影响就是会导致卡顿。红色次过度绘制这部分的像素点只在屏幕上绘制了五次。我们的目标是要控制界面最多被过度绘制次不出现粉色和红色。但是要根据实际情况来做一个取舍,在保证性能的同时尽量避免。什么是过度绘制(OverDraw) 在多层次重叠的UI结构里面,如果不可见的UI也在做绘制的操作,会导致某些像素区域被绘制了多次。这样就会浪费大量的CPU以及GPU资源。过度绘制最直观的影响就...

    番茄西红柿 评论0 收藏0
  • Andorid之页面布局优化

    摘要:二页面布局优化实操标签的使用操作是将需要重用的布局写在一个单独的文件中,再使用标签复用到其他布局中。文章大纲 一、为什么要进行页面布局优化二、页面布局优化实操三、项目源码下载四、参考文章 一、为什么要进行页面布局优化   在开发Android时,会遇到某些是通用的布局,我们常将一些通用的视图提取到一个单独的layout文件中,然后使用等标签在需要使用的其他layout布局文件中加载进来,比如...

    dack 评论0 收藏0

发表评论

0条评论

sushi

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<