1.问题
在最新的需求中,想通过getMeasureWidth( )方法获取一个FrameLayout布局的measureWidth值,但由于未进行Measure步骤,所以getMeasureWidth( )最终会返回0。所以想手动调用View.measure(0, 0)方法,主动触发Measure步骤。再获取measureWidth。但该方案对一些View是无效的。下面分析在什么情况下执行measure(0, 0)可得到正确的measureWidth值。
2.分析
提示:分析前假定你已阅读了《View的Measure过程解析》,并熟悉了View的Measure过程
在View.measure(0, 0)中参数是模式和大小的组合值, 0 表示模式为MeasureSpec.UNSPECIFIED,大小为0。所以执行View.measure(0, 0)方法就是告诉View:你自己来决定你的大小吧
当子View收到这个消息后,View会在onMeasure( )方法决定自己的大小,View.onMeasure( )默认的实现如下:
protected int getSuggestedMinimumWidth() {
return (mBackground == null) ? mMinWidth : max(mMinWidth, mBackground.getMinimumWid