自定义布局只是为了覆盖onMeasure()

时间:2013-11-21 17:01:23

标签: android android-linearlayout onmeasure

我想使用扩展LinearLayout类的自定义布局并覆盖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

1 个答案:

答案 0 :(得分: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>

修改:如果你共享了LinearLayout的代码,我也没有看到使用CustomLayout的子类的任何原因。