由于Square的 onMeasure已经被覆盖,它忽略了传递给它的高度,根据您的代码:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, widthMeasureSpec);
}
做你想做的事的一种方法——view2扩展了view1,但现在我希望view2的高度等于父级,因此覆盖整个屏幕——也是像这样覆盖调用setDimension的view2的onMeasure。 ..
public class Square2 extends Square {
public Square2(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
setMeasuredDimension(widthMeasureSpec, heightMeasureSpec);
}
}
这是我试用后的示例。(对于 Square View 中的代码,我只是在 onMeasure 中复制了您的代码)。
使用正方形:

对于 Squre2:

希望这可以帮助。