我有一个场景:
ViewA extends
ViewB,都覆盖onMeasure()
并致电setMeasuredDimension()
。 ViewA将其宽度设置为10dp
,而ViewB将其宽度设置为20dp
。现在,如果我在super.getMeasuredWidth()
的末尾从ViewB调用onMeasure()
来获取ViewA的宽度,我会得到20dp
。当ViewA完成自我测量时,原因很明显,ViewB调用setMeasuredDimension()
,后者又覆盖旧值。
现在显而易见的解决方案是覆盖相关方法。我的问题是,在自定义setMeasuredDimension()
中覆盖getMeasuredWidth()
或getMeasuredHeight()
,View
是一种好习惯。
答案 0 :(得分:1)
onMeasure()
视图中,我立即收集了View的宽度和高度,然后调用了setMeasuredDimension()
:
super.onMeasure(wSpec, hSpec);
final int superWidth = super.getMeasuredWidth();
final int superHeight = super.getMeasuredHeight();
setMeasuredDimension(w, h);
// use superWidth and superHeight here
就是这样。