1

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

    <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)。但是,当我的活动布局时,传递给这两个方法的值表示“屏幕的整个垂直高度”。

因此,我的自定义视图最终使自己尽可能高,而按钮/文本视图使自己“尽可能高”(wrap_content)。当这两个高度超过屏幕的高度时,自定义视图的底部被绘制在按钮/文本视图的后面。

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

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

4

1 回答 1

0

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

于 2012-11-01T00:20:46.700 回答