我有一个视图view1,它扩展了FrameLayout并像这样覆盖了onMeasure(),因此它被呈现为一个正方形:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, widthMeasureSpec);
}现在我想要创建另一个视图view2,它扩展了view1,但是现在我希望view2有一个与父视图相等的高度,从而覆盖整个屏幕。从现在起,我也把它当作正方形。
我怎样才能做到这一点?
发布于 2016-03-07 02:51:20
意见1:
private boolean measureAsSquare = true;
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
if (measureAsSquare) {
super.onMeasure(widthMeasureSpec, widthMeasureSpec);
}
else {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}
public void setMeasureAsSquare(boolean b) {
measureAsSquare = b;
}在View2构造函数中,子类视图1:
public View2(Context c) {
setMeasureAsSquare(false);
}然后,可以使用视图2的正常布局权重和高度来指定其首选大小。
发布于 2016-03-07 03:05:23
由于onMeasure for Square已经被覆盖,因此它忽略了传递给它的高度,按照您的代码:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, widthMeasureSpec);
}做你想做的事情的一种方法-- view2,它扩展了view1,但现在我希望view2有一个与父级相等的高度,从而覆盖整个屏幕--也就是重写view2的onMeasure,像这样调用setDimension .
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:

希望这能有所帮助。
https://stackoverflow.com/questions/35835277
复制相似问题