2013-11-21 76 views
0

我想使用擴展的LinearLayout類並覆蓋這樣的onMeasure()方法,我的自定義佈局:自定義佈局只是爲了覆蓋onMeasure()

<com.myPackage.CustomLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 
     ..... 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 
     ..... 
    </LinearLayout> 

</com.myPackage.CustomLayout> 

我的自定義佈局:

public class CustomLayout extends LinearLayout { 
    private static final double VIEW_ASPECT_RATIO = 2; 
    private ViewAspectRatioMeasurer varm = new ViewAspectRatioMeasurer(
      VIEW_ASPECT_RATIO); 

    public HomeLayout(Context context) { 
     super(context); 
    } 

    public HomeLayout(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     varm.measure(widthMeasureSpec, heightMeasureSpec); 
     setMeasuredDimension(varm.getMeasuredWidth(), varm.getMeasuredHeight()); 
    } 
} 

問題是,它不會顯示在所有的孩子佈局,所以我如何得到這項工作? 謝謝!

(對不起我的英文不好)

編輯:我已經使用這個類https://github.com/jesperborgstrup/buzzingandroid/blob/master/src/com/buzzingandroid/ui/ViewAspectRatioMeasurer.java

回答

0

錯誤是你使用android:orientation="horizontal"CustomLayout(延伸LinearLayout)和android:layout_width="match_parent"爲您的孩子LinearLayout秒。

嘗試佈局改成這樣:

<com.myPackage.CustomLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal"> 

    <LinearLayout 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     layout_weight="1" > 
     ..... 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     layout_weight="1"> 
     ..... 
    </LinearLayout> 

</com.myPackage.CustomLayout> 

編輯:我也沒有看到,如果你的CustomLayout的代碼是你共享使用的LinearLayout子類的任何原因。

+0

感謝您的回答,但它不起作用。我只想保持任何屏幕尺寸的相同寬高比。 – ChAndroid

+0

刪除您的onMeasure方法並嘗試。問題應該在你的ViewAspectRatioMeasurer類上。 – Devrim

+0

好的非常感謝!感謝您關於onMeasure方法的通知,我發現問題:我忘記了調用方法: super.onMeasure(widthMeasureSpec,heightMeasureSpec); 所以現在,它工作得很好。謝謝 – ChAndroid