原始网页直通车

UNSPECIFIED

UNSPECIFIED :未指明的,未指定的。在这个模式下父控件不会干涉 子View 想要多大的尺寸。

这个模式什么时候会在 onMeasure 里遇到呢?

这其实取决于父容器。

拿最常用的 RecyclerView 为例,在 Item 进行 measure 时,如果列表可滚动,并且 Item 的宽或高设置了 WRAP_CONTENT 的话,那么接下来, ItemViewonMeasure 方法就会收到 MesureSpec.UNSPECIFIED

打开 RecyclerView 源码,会在 getChildMeasureSpec 方法里看到这么一句注释:

MATCH_PARENT can’t be applied since we can scroll in this dimension, wrap instead using UNSPECIFIED.

它表达的是:在可滚动的 ViewGroup 中,不应该限制 Item 的尺寸(如果是水平滚动,就不限制宽度)。为什么呢? 因为是可以滚动的,无论 Item 有多宽,有多高,通过滚动也一样能看到滚动前被遮挡的部分。

有同学可能会有疑问: 我设置了 WRAP_CONTENT ,在 onMeasure 中应该收到的是 AT_MOST 才对啊,为什么会强制变成 UNSPECIFIED

这是因为考虑到 Item 的尺寸有可能超出这个可滚动的 ViewGroup 的尺寸,而在 AT_MOST 模式下, 子View 的尺寸不能超出所在的 ViewGroup 的尺寸,最多只能等于。所以在这个场景下,用 UNSPECIFIED 会更合适,这个模式下你想要多大就多大。

我们在自定义 View 的时候,在测量时发现是 UNSPECIFIED 模式时,应该怎么做呢?

这个就比较自由了,既然尺寸由自己决定,那么我们既可以写死为 50,也可以写死为 200。当然了,还是要根据实际需求来定义。

比如 ImageView ,它的做法就是:有设置图片内容( drawable )的话,会直接使用这个 drawable 的尺寸,但不超过指定的 MaxWidthMaxHeight , 没有内容的话就是 0。

TextView 处理 UNSPECIFIED 的方式,和 AT_MOST 是一样的。

当然了,这些尺寸都不一定等于最后 layout 出来的尺寸,因为最后决定 子View 位置和大小的,是在 onLayout 方法中,在这里你完全可以无视这些尺寸,去 layout 成自己想要的样子。不过,一般不会这么做。

详细描述下自定义 View 测量时的 MesureSpec.UNSPECIFIED相关推荐

  1. 自定义View开发时踩的坑

    在这篇博客中,我希望按照日记的方式来记录自己在android的自定义视图开发中所遇到的一些问题: 1.首先是在自定义view中获取对应的子视图,在自定义视图中定义了很多成员变量,按照个人的代码编写习惯 ...

  2. Android自定义View的四种方式

    目录 一 前言 二 分类 1.组合控件 2.继承系统控件 3.继承View 4.继承ViewGroup 三 自定义View 1.构造函数 2.onMeasure 3.onLayout 4.onDraw ...

  3. android自定义起止时间的时间刻度尺,Android 自定义View篇(六)实现时钟表盘效果...

    前言 Android 自定义 View 是高级进阶不可或缺的内容,日常工作中,经常会遇到产品.UI 设计出花里胡哨的界面.当系统自带的控件不能满足开发需求时,就只能自己动手撸一个效果. 本文就带自定义 ...

  4. 自定义view - 收藏集 - 掘金

    Android 从 0 开始自定义控件之 View 的 draw 过程 (九) - Android - 掘金 转载请标明出处: http://blog.csdn.net/airsaid/... 本文出 ...

  5. Android 自定义view onMeasure() 方法剖析

    接着上一篇自定义view 相关的,揭秘 Android Graphics2D 实现动态效果之--invalidate()   内容的介绍,这一篇主要介绍下自定义view 中的 onMeasure()方 ...

  6. Android自定义View如此简单 实现点击动画+进度刷新的提交/下载按钮(填坑面试题)

    SubmitButton 背景 实现思路 继承View 面试题:构造方法如何选择 自定义属性 面试题:styleable.AttributeSet.TypedArray的关系 测量宽高 面试题:UNS ...

  7. Android自定义View,滑动,事件传递小结

    本文只总结知识点 欢迎补充,欢迎纠正.谢谢! #预备知识 Android控件框架 ####1. View树状图 Android的View树结构总是以一个ViewGroup开始,包含多个View或Vie ...

  8. Android中的自定义view和自定义属性TypedArray的使用

    先总结下自定义View的步骤: 1.自定义View的属性 2.在View的构造方法中获得我们自定义的属性 [ 3.重写onMesure ] 4.重写onDraw 我把3用[]标出了,所以说3不一定是必 ...

  9. Android之自定义View的实现

    对于学习Android开发的小童鞋对于自定义View一定不会陌生,相信大家对它是又爱又恨,爱它可以跟随我们的心意设计出漂亮的效果:恨它想要完全流畅掌握,需要一定的功夫.对于初学者来说确实很不容易,网上 ...

最新文章

  1. linux 脚本自动编制工具,全自动工具链编译脚本
  2. module ‘imgaug.augmenters‘ has no attribute ‘Resize‘
  3. python都能干什么-python都能做什么
  4. Linux下Apache虚拟主机配置
  5. SqlServer项目经验:介质集有2个介质簇,但只提供了1个。必须提供所有成员
  6. ubuntu 电源按钮操作_桌面应用|在 Ubuntu 中使用 Slimbook Battery Optimizer 切换电源模式...
  7. JavaScript设置对象的不可拓展
  8. STM32开发 -- HardFault_Handler处理
  9. OpenCV TSP(TravelingSalesman Problem)的实例(附完整代码)
  10. 深度学习-Tensorflow2.2-RNN循环神经网络{11}-RNN空气污染预测-26
  11. Angular里遇到的一个依赖注入问题以及解决办法
  12. 通过显式寻找物体的 extremity 区域加快 DETR 的收敛:Conditional DETR
  13. CV新赛事|CT影像诊断新冠肺炎北京垃圾分类识别~文末有福利
  14. CGI form标签学习
  15. [小甲鱼]汇编语言笔记 基础知识
  16. 8.25 ccpc 比赛总结
  17. mysql查看sa密码_查询mssql 密码
  18. openlayer地图裁切
  19. wc -m命令在统计字符数的时候为什么总是多一个?
  20. 从用户个体的角度,谈微信群吱口令红包

热门文章

  1. Hdu2612Find a way
  2. ERA5 积雪 降雪 区别_黑龙江漠河迎入秋以来最大降雪
  3. 【JavaScript】js对象进行排序(对象转数组,对象转对象)
  4. C# Directory
  5. 2023新财富500富人:钟睒睒再夺首富,马云重回前十,王传福排名第11 —— 第2富的字节跳动的一鸣同学好年轻
  6. 特征工程系列:自动化特征构造
  7. 威布尔分布及其性质与数字特征
  8. VMware虚拟机通过宿主机的无线网络上网
  9. Python图片转字符画,太好玩啦(46)
  10. JavaScript循环结构