2016-03-07 67 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); –