您的位置:首页 > 其它

今天想感谢一个伙伴

2020-12-24 23:38 1396 查看

这位小伙伴的昵称是:

陈小缘

如果大家平时打开公众号比较多,那么一定知道这个系列:

这交互炸了系列 第十三式之移花接木

这交互炸了系列 第十二式之年年有鱼

....

看名字就知道至少有十三篇啦,可以自行去作者博客学习。

每一篇质量都非常高。

不过感谢主要的原因不是这个。

追溯问答

还记得在 5 月底的时候,玩 Android 上线了问答:

千呼万唤始出来 玩Android 上线了问答

我大概发布了 10 多个问题:


其实发布问题是一个很无聊的事情,有时候发布几天了,还没人回答,慢慢就会形成一股非常消极的情绪,对该功能甚至自我的否定:

这功能有个鸡儿用,哪能形成沉淀呢...

印象最深的一次,我发布了一个 Binder 的问题,挂了好几天没人回答,我就开始自暴自弃了(仔细看上图 ,binder 接下一个问题,周期接近半个月),还好他,没错,就是这个男人,群里 at 了我一下,问我问答呢?

把我从放弃边缘拉回来了。

所以在这夜深人静的时刻,我数了一下所有的问题,陈小缘啦啦啦同学几乎回答了我所有的问题。

我数了一下,只有一个问题,gradle plugin 相关的没有回答,其他都做了解答。

说实话,没有小缘的回答,这个功能我就准备石沉大海了。

在此表示由衷的感谢。

问答的初衷

其实我最初做问答这个功能,主要是针对学习性质的问题,什么意思呢?

就是问答的含义实际上是给大家查缺补漏,或者是以前没有了解过的内容,刚好学习一下,最后回来回答总结一下。

往大一点说,整个网站都是偏学习性质的,就是它只能作为你想要学习的时候,来看看文章。

今天的干货

听我扯了这么多,要是不加点干货,感觉浪费一次推送,好亏。

那么今天就主要贴个问答吧。

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

相信大家多数都能说出自定义的步骤,但是很多细节上的问题其实也需要关注。

针对MesureSpec.UNSPECIFIED

  1. 这个模式什么时候会遇到?

  2. 遇到后怎么处理?

  3. 有什么注意事项?

这个问题,我基本上面试都会问,能够回答上来的同学其实很少。

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

那么,这个模式什么时候会在onMeasure里遇到呢:

其实是取决于它的父容器。

就拿最常用的RecyclerView做例子,在item进行measure时,如果列表可滚动,并且item的宽或高设置了WRAP_CONTENT的话,那么接下来,itemView的onMeasure方法就会收到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模式下,你的尺寸不能超出你所在的ViewGroup的尺寸,最多只能等于。所以用UNSPECIFIED会更合适,这个模式下你想要多大就多大。

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

这个就比较自由了,既然尺寸由自己决定,那么我可以写死为50,也可以固定为200。

但还是建议结合实际需求来定义咯。

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

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

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

不过,一般不会这么做。

来自:小缘的回答。

意外的发现

有一位公众号主 nanchen,受到我之前做的:

我在一个群分享Android 好像被我分享得没人说话了... 3期

算是启发吧。每日一问这个事情,说实话看起来非常容易,坚持下来难到不行。

也在陆续更新一些每日一问的内容,不知道能坚持多久,但还是为他点赞,文章大概如下:

每日一问:讲讲 Java 虚拟机的类加载机制

最后

还记得第一次和小缘聊天的时候,他还在纠结怎么追女神,最近发现他已经在给女朋友买书了!

应该是好人有好报吧。

嘿嘿嘿~

那个,小缘不要有压力,千万不要因为这篇文章,心态不要产生任何变化,把回答作为任务,其实还是就想回答就回答,该做菜做菜,轻松过好自己的每一天!

推荐阅读:

教你写一个弹幕库,确定不了解一下?

Android 优质技术分享 | 6 期

19年3月移动端大厂面试题分享

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: