安卓:RelativeLayout背景图片消失

3

我有一个针对Fragment(android.support.v4.app.Fragment)的xml布局。当第一次添加此Fragment时,背景drawable显示正常。但当这个Fragment被替换为另一个Fragment,然后再次替换回来(通过创建一个新实例并使用FragmentTransaction.replace()),背景drawable消失了(但不是所有情况都是如此,请参见下文)。以下是该Fragment的布局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>

所讨论的背景可绘制对象位于具有id“pageLayout”的RelativeLayout中。
可能的线索:
- 当我删除其中的ImageView时,背景可绘制对象正常显示。 - 其他片段具有类似的布局xml(具有相同的背景可绘制对象),但其中没有ImageView,并且它们可以正常工作。 - 这些片段中的一个具有WebView和按钮,这个的背景也能正常显示。 - 将“WebView片段”替换为所讨论的片段后,背景正常显示(!?)。
编辑:如果将图像加载到ImageView中,然后在其上启动对话框主题活动,然后完成,则会始终出现相同的问题。我下面的解决方案可以解决这两种情况。
4个回答

1
发现了比上一个更好的解决方案。在片段的onResume()中,只需要执行以下操作:
    getView().post(new Runnable() {
        @Override
        public void run() {
            View v = getView();
            if (v != null)
                v.invalidate();
        }
    });

它会引起闪烁,但至少似乎能够一致地工作。


1
我认为使用独立的ImageViews而不是使用android:background属性可以解决这个问题。 - Ken

0
我曾经遇到过类似的问题。在一个RelativeLayout中,有一个ImageView和一个TextView。 我通过调用bringToFront方法解决了这个问题:
myImageView.bringToFront();

希望这有所帮助。

0

好的,我在尝试修复另一个问题时解决了这个问题。通过对page ImageView调用setLayoutParams()方法(使用任何布局参数)来解决了该问题。这导致pageLayout RelativeLayout的背景再次显示出来。问题的原因仍然不明确...


-1

片段被替换,连同它们的背景一起替换,这意味着

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

  2. 如果您没有给片段B任何背景,则可以在片段A上方看到片段B。


它们都有相同的背景可绘制对象。在我的情况下,我添加了A,然后用B替换A,再将B替换为A,此时A的背景可绘制对象没有被绘制出来(显示为黑色)。 - Ken

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接