我有一个自定义视图(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()
但它没有改变任何东西。
答案 0 :(得分:1)
我认为问题是您的容器视图在添加自定义视图之前会被夸大和布局,因此它的高度为0,因为它没有内容。将其添加到其容器后,将强制重新布局,此时容器会要求子视图自行测量。由于容器的高度为wrap_content
,因此孩子需要在此时报告特定的高度。我的猜测是你的MyView
课程没有这样做。
为了设置MyView
对象的高度,一件简单的事情就是覆盖并实现onMeasure()
方法。