自定义视图在布局中不缩小

时间:2012-10-31 23:01:56

标签: android android-layout android-linearlayout android-view

我有一个自定义视图,我试图在垂直方向上使用文本视图/按钮组合(卡在水平LinearLayout中)位于屏幕下方。目前我的布局如下:

    <com.company.widgets.MyCustomView
        android:id="@+id/custom"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" 
        android:layout_alignParentTop="true"
        android:layout_weight="0.0" />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal|center_vertical"
        android:layout_marginTop="10dp"
        android:layout_alignParentBottom="true"
        android:layout_weight="1.0"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical|left"
            android:layout_marginLeft="15dp"
            android:layout_marginRight="5dp"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:textColor="#000000"
            android:text="foobar" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical|right"
            android:layout_marginLeft="5dp"
            android:layout_marginRight="15dp"
            android:text="foobar" />
    </LinearLayout>

在我的自定义视图中,我覆盖了onMeasure()和onSizeChanged()。我努力确保我的视图大小不超过measureSpec(对于onMeasure)或宽度/高度值(对于onSizeChanged)传递的大小。但是,当我的活动布局时,传递给这两个方法的值代表“屏幕的整个垂直高度”。

因此,我的自定义视图最终使自己变得像它想要的那样高,而按钮/ textview使自己“像他们需要的那样高”(wrap_content)。当这两个高度超过屏幕高度时,自定义视图的底部会在后面按钮/文本视图中绘制。

我的问题:我应该如何修改布局,以便我的自定义视图的onMeasure()和/或onSizeChanged()方法传递更短的高度值?我希望他们收到一个代表“屏幕高度 - textview / button的高度”的值。

注意:如果我更改布局以使textview /按钮位于上方自定义视图,则传递的高度值是正确的(即小于屏幕高度)。

1 个答案:

答案 0 :(得分:0)

解决了它。使外部元素为LinearLayout而不是Relative并反转权重。自定义视图的权重应为“1”,包含TextView和Button的LinearLayout的权重应为零。这会导致传递给我的自定义视图的onMeasure()的高度值仅为未被textview /按钮占用的屏幕部分。