我有一个自定义视图,我试图在垂直方向上使用位于屏幕下方的文本视图/按钮组合(卡在水平线性布局中)。目前我的布局如下所示:
<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 位于自定义视图上方,则我传递的高度值是正确的(即小于屏幕高度)。