【发布时间】:2012-10-31 23:01:55
【问题描述】:
我有一个自定义视图,我正尝试在垂直方向使用文本视图/按钮组合(卡在水平 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)。但是,当我的活动布局时,传递给这两个方法的值表示“屏幕的整个垂直高度”。
因此,我的自定义视图最终使自己尽可能高,而按钮/文本视图使自己“尽可能高”(wrap_content)。当这两个高度超过屏幕高度时,自定义视图的底部被绘制在按钮/文本视图的后面。
我的问题:我应该如何修改布局,以便我的自定义视图的 onMeasure() 和/或 onSizeChanged() 方法传递一个较短的高度值?我希望他们收到一个代表“屏幕高度 - 文本视图/按钮的高度”的值。
注意:如果我更改布局以使文本视图/按钮位于自定义视图的上方,则我传递的高度值是正确的(即小于屏幕高度)。
【问题讨论】:
-
我不明白你想要完成什么,也许包括一个截图。此外,您应该考虑更改构成视图的对象,而不是覆盖 onMeasure 和 onSizeChanged。听起来您应该研究一下 RelativeLayout 而不是使用 LinearLayout。
-
我的自定义视图实际上是一个日历小部件,允许用户点击天数。因为它是一个自定义视图并且我自己进行测量和绘画,所以我确实需要覆盖 onMeasure() 和 onSizeChanged()。我希望完成的是让 textview/button 组合占据其所需的高度(wrap_content),并让自定义视图调整自身大小以消耗 textview/ 使用的所有屏幕高度 not按钮组合。
标签: android android-layout android-linearlayout android-view