DEVLOG 9.10(二) 关于自定义View的一些问题总结:
问题记录:
View支持wrap_content:
自定义View如果继承View时,如果不去实现onMeasure处理wrap_content,则当这个View设置了wrap_content时,View的长度和父容器中可用长度相同,而且测量模式为AT_MOST。推导
View#onMeasure会调用View#getDefaultSize,里面会指定View的specSize 为传过来的MeasureSpec。
这个MeasureSpec由ViewGroup决定。通过ViewGroup#getChildMeasureSpec可以推导出一张表,可以得出结论。


1.1 . 怎么处理?
思路:在onMeasure中获取Image(假设想wrap_content bitmap)的宽高,然后检查width和height的LayoutParams属性,如果是wrap_content,设置为从bitmap中拿到的大小;否则设置为传入的测量的大小。
可以参考Android开发艺术探索+这篇博客
https://blog.csdn.net/carson_ho/article/details/62037760
2. 完成你的View的时候实现padding
padding表示【填料】和margin不同,通俗的理解上margin是外边距,padding是内边距。继承自View和ViewGroup的自定义空间肯定没有实现padding的处理。毕竟实现MeasureSpec的时候计算了LayoutParams,里面就有Margin计算。这个实现也不难,View#getPaddingxxxx获取padding,减小width和height就行【因为内部被填充了,大小减小了】。
今天就这样~