我有一个视图view1
,它扩展了FrameLayout并像这样重写onMeasure(),以便它呈现为正方形:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, widthMeasureSpec);
}
现在我想创建一个扩展view2
的另一个视图view1
,但现在我希望view2
的高度等于父级,因此可以覆盖整个屏幕。截至目前,我也把它作为一个正方形。
我如何实现这一目标?
答案 0 :(得分:1)
在视图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的正常布局权重和高度来指定其首选大小。
答案 1 :(得分:1)
由于 Square 的onMeasure已被覆盖,因此根据您的代码忽略传递给它的高度:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, widthMeasureSpec);
}
一种方法可以做你想要的 - view2扩展view1,但现在我希望view2的高度等于父级,因此覆盖整个屏幕 - 也是覆盖view2调用setDimension的 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:
希望这有帮助。