在自定义视图中覆盖`setMeasuredDimension()`或`getMeasuredWidth()`是一个好习惯吗?

时间:2013-10-25 09:37:25

标签: android android-view android-custom-view

我有一个场景:

ViewA extends ViewB,都覆盖onMeasure()并致电setMeasuredDimension()。 ViewA将其宽度设置为10dp,而ViewB将其宽度设置为20dp。现在,如果我在super.getMeasuredWidth()的末尾从ViewB调用onMeasure()来获取ViewA的宽度,我会得到20dp。当ViewA完成自我测量时,原因很明显,ViewB调用setMeasuredDimension(),后者又覆盖旧值。

现在显而易见的解决方案是覆盖相关方法。我的问题是,在自定义setMeasuredDimension()中覆盖getMeasuredWidth()getMeasuredHeight()View是一种好习惯。

1 个答案:

答案 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

就是这样。