2016-03-07 38 views
0

我有延伸的FrameLayout和覆盖onMeasure()这样的观点view1,使之呈现为广场的景色:延伸的覆盖onMeasure()

@Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    super.onMeasure(widthMeasureSpec, widthMeasureSpec); 
    } 

现在我想创建另一个视图view2它延伸view1,但现在我想view2有一个高度等于父,并因此覆盖整个屏幕。到现在为止,我也把它当成了一个正方形。

我该如何做到这一点?

回答

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; 
} 

在视图2的构造的子类视图1:

public View2(Context c) { 
    setMeasureAsSquare(false); 
} 

然后,可以使用正常的布局体重和身高视图2分配其优选大小。

+0

你让我的一天!我正在反思这一点。 :) –

1

由于对广场的onMeasure已经重写它忽略传递给它的高度,按您的代码:

@Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    super.onMeasure(widthMeasureSpec, widthMeasureSpec); 
    } 

一种方式做你想要的东西 - 视图2延伸厂景,但现在我想视图2有等于父的高度,因此覆盖全屏幕 - 是还覆盖onMeasure视图2呼吁这样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中)。

使用方: enter image description here

对于Squre2:

enter image description here

希望这有助于。

+0

看来你能够提供的高度,而不仅仅是简单的让它等于父母,你只需要改变 - setMeasuredDimension(widthMeasureSpec,ViewGroup.LayoutParams.MATCH_PARENT); - 到 setMeasuredDimension(widthMeasureSpec,heightMeasureSpec); –