如果设置了背景,RelativeLayout不会绘制子项

时间:2011-11-18 15:43:31

标签: android background relativelayout imagebutton xml-layout

我从CalloutView扩展了课程RelativeLayout。目前没有任何方法,它只是重新定义了构造函数。

我也有一个XML布局:

<?xml version="1.0" encoding="utf-8"?>
<com.example.CalloutView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="70dp">

    <ImageButton
        android:id="@+id/imageButton1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:layout_marginRight="6dp"
        android:layout_marginTop="6dp"
        android:background="@drawable/button_disclose"
        android:src="@drawable/disclose" />

</com.example.CalloutView>

我通过此代码扩充CalloutView实例的布局:

this.calloutView = (CalloutView) ((LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.callout_view, null);
this.calloutView.setLayoutParams(new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, 105));
this.calloutView.measure(MeasureSpec.makeMeasureSpec(400, MeasureSpec.AT_MOST),  MeasureSpec.makeMeasureSpec(105, MeasureSpec.EXACTLY));

它呈现完美。 ImageButton出现在它的右侧,就像它应该的那样。

但是当我向CalloutView添加背景时:

<com.example.CalloutView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="70dp"
    android:background="@drawable/callout">
...
</com.example.CalloutView>

它只渲染背景,但ImageButton不会出现。


修改

我使用NinePatch图像作为背景。如果我用非NinePatch替换它一切正常。 Android中的错误?


主要问题是,如果设置了背景,为什么不呈现ImageButton

2 个答案:

答案 0 :(得分:0)

我尝试了您的代码,但用RelativeLayout替换了您的自定义布局:

RelativeLayout calloutView = (RelativeLayout) ((LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.main, null);
        calloutView.setLayoutParams(new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, 105));
        calloutView.measure(MeasureSpec.makeMeasureSpec(400, MeasureSpec.AT_MOST),  MeasureSpec.makeMeasureSpec(105, MeasureSpec.EXACTLY));

        setContentView(calloutView);

和xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="70dp"
    android:background="@drawable/ic_launcher">

    <ImageButton
        android:id="@+id/imageButton1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:layout_marginRight="6dp"
        android:layout_marginTop="6dp"
        android:background="#ff0000"
        android:src="@drawable/ic_launcher"
         />

</RelativeLayout>

工作正常:

screenshot

因此,这必须与您的布局有关。 确保在重新定义的构造函数中,首先调用超级构造函数。

答案 1 :(得分:0)

它看起来像Android 2.3.3中的一个错误。我使用我的PNG文件作为NinePatch作为背景,我得到了这个问题。如果我使用另一个NinePatch,一切都会像它应该的那样。

我无法在Android 3.1上重现此问题。