Android:RelativeLayout背景drawable消失

时间:2011-10-11 17:15:52

标签: android user-interface

我有一个片段的xml布局(android.support.v4.app.Fragment)。当第一次添加此片段时,背景drawable显示正常。但是当这个片段被另一个Fragment替换后,再次被替换回来(通过创建一个新实例并使用FragmentTransaction.replace()),背景drawable消失(但并非在所有情况下,请参阅下面)。这是片段的布局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="fill_parent">
    <include layout="@layout/footer_photos" />
    <RelativeLayout
        android:id="@+id/pageLayout"
        android:background="@drawable/body_background2"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_above="@id/footer">
        <ImageView
            android:id="@+id/page"
            android:layout_height="500dp"
            android:layout_width="400dp"
            android:layout_centerInParent="true"
            android:background="#FFF" />
    </RelativeLayout>
</RelativeLayout>

有问题的背景是在RelativeLayout中,ID为“pageLayout”。

可能的线索:

  • 当我删除那里的ImageView时,背景可绘制显示正常。
  • 其他片段具有相似的布局xmls(具有相同的背景可绘制),但其中没有ImageViews,并且它们工作正常。
  • 其中一个片段里面有一个WebView和按钮,这个背景显示得很好。
  • 用有问题的片段替换“WebView片段”后,背景显示正常(!?)。

编辑:如果将图像加载到ImageView中,则会始终出现相同的问题,然后在其上启动以对话为主题的活动,然后完成。我的解决方案解决了这两种情况。

4 个答案:

答案 0 :(得分:1)

找到比上一个更好的解决方案。在片段的onResume()中,只需要这样做:

    getView().post(new Runnable() {
        @Override
        public void run() {
            View v = getView();
            if (v != null)
                v.invalidate();
        }
    });

它会导致闪烁,但至少它似乎始终如一。

答案 1 :(得分:0)

我有类似的问题。使用relativelayout,有一个imageView和一个textView。 我决定调用bringToFront方法:

myImageView.bringToFront();

希望这会有所帮助。

答案 2 :(得分:0)

好的,我在尝试修复另一个问题时解决了这个问题。通过调用page ImageView上的setLayoutParams()(使用任何布局参数)解决了该问题。这导致pageLayout RelativeLayout的背景再次出现。问题的原因仍然未知......

答案 3 :(得分:-1)

替换碎片及其背景,这意味着

  1. 当片段A被片段B替换时,背景会变为片段B的背景。

  2. 如果你没有给片段B提供任何背景信息,那么你可以在片段A上看到片段B.