由于自定义视图,layout_below不起作用

时间:2014-07-12 16:56:45

标签: android android-layout android-custom-view

我有一个自定义视图(MyView)扩展了SurfaceView,我在其中覆盖了onDraw方法。我使用自定义构造函数动态创建此视图的实例:

MyView myView = new MyView(...);

在这个构造函数中,我调用了super(Context context)方法。

之后,我将自定义视图包装在RelativeLayout中,如下所示:

((RelativeLayout) findViewById(R.id.container)).addView(myView);

这是我正在使用的布局文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <RelativeLayout
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <TextView 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Test"
        android:layout_below="@+id/container"/>

</RelativeLayout>

问题是TextView位于屏幕顶部,而不是低于RelativeLayout@+id/container ID)。因为它没有android:layout_below属性。

它的行为类似于我的自定义视图(MyView)不设置其尺寸。我尝试使用setLayoutParams()但它没有改变任何东西。

1 个答案:

答案 0 :(得分:1)

我认为问题是您的容器视图在添加自定义视图之前会被夸大和布局,因此它的高度为0,因为它没有内容。将其添加到其容器后,将强制重新布局,此时容器会要求子视图自行测量。由于容器的高度为wrap_content,因此孩子需要在此时报告特定的高度。我的猜测是你的MyView课程没有这样做。

为了设置MyView对象的高度,一件简单的事情就是覆盖并实现onMeasure()方法。