LinearLayout提供的onMeasure()参数

时间:2011-01-16 06:55:21

标签: java android user-interface

我创建了一个自定义视图,并尝试实现onMeasure()以在所有情况下都能正常工作。我目前想知道当我的视图放置在如下的线性布局中时作为width / heightMeasurementSpec传递的参数:

<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:orientation="vertical" >
  <MyView   
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
   android:id="@+id/someId"></MyView>
</LinearLayout>

在这种情况下做完

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
  int height = MeasureSpec.getSize(heightMeasureSpec);
  int heightmode = MeasureSpec.getMode(heightMeasureSpec);
  //...
}

我的身高= 271(在480x320的屏幕上)和身高模式= AT_MOST这似乎有意义。

但是当我在视图之后添加一些像这样的TextView时:

  <LinearLayout
      xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:orientation="vertical" >
      <MyView   
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
       android:id="@+id/someId"></MyView>
    <TextView android:text="1"  android:layout_width="fill_parent"
  android:layout_height="wrap_content"></TextView>
    <TextView android:text="2"  android:layout_width="fill_parent"
  android:layout_height="wrap_content"></TextView>
    </LinearLayout>

我仍然得到相同的高度/高度模式值(onMeasure实际上被调用两次,但使用相同的参数)。我认为,由于TextViews占用了一些空间,MyView应该有更少的空间? (哪个会好的,但我需要知道我可以占用多少空间......)

有什么想法吗?非常感谢!

2 个答案:

答案 0 :(得分:1)

在自定义视图后添加TextViews ,因此它们的高度不会影响自定义视图的高度。

答案 1 :(得分:0)

我想出了如何实现我想要的目标:

1。)View不负责确定是否应填充所有可用空间。这是在布局中完成的。

2。)我可以通过像

这样的布局为视图提供所有剩余的垂直空间
 <MyView   
  android:layout_width="fill_parent"
  android:layout_height="0px" android:layout_weight="1"></MyView>

3。)onMeasure()应该通过考虑模式(getMode(widthMeasurementSpec))来设置测量的维度。