注意:我已经将这个问题报告给了Android项目的错误报告中心,链接如下:http://code.google.com/p/android/issues/detail?id=39159。同时请查看接受的赏金答案,不幸的是,解决方法是使用绝对布局(即指定'dp'而不是'wrap_content'等)来修复此问题。
当我在图片上放置背景时,我遇到了非常奇怪的行为。为了向您演示问题,我已经大大简化了代码。我的做法是在RelativeLayout中放置一个图像,并使用一个背景。似乎给RelativeLayout添加填充会导致图像的背景被错误地绘制。Wrap_content似乎出了问题。
首先,这是演示问题的代码。请注意,如果不使用LinearLayout,只给ImageView添加背景也会看到同样的行为,但这真的更好地演示了问题。
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="60dp"
android:padding="5dp" >
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/black_bg" >
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:src="@drawable/red_rectangle" />
</LinearLayout>
</RelativeLayout>
</FrameLayout>
这是black_bg的xml文件:
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#FF000000"/>
</shape>
这里是红色矩形: 请注意,这是一个参考图像,以展示问题。我的实际图像有细节,因此不能使用.9.png格式。
这是问题的屏幕截图: 您可以看到,图像宽度小于linearlayout,尽管linearlayout的宽度设置为“wrap_content”。如果我将relativelayout填充设置为0dp,则此问题会消失。
我希望这里提供的资源集相对容易理解,因此如果需要,人们可以自己尝试一下。
供参考,我正在使用此功能在图像周围提供边框,因此我可以使线性布局(或图像本身)具有填充,但在这种情况下问题仍然存在。
编辑:似乎我可能需要更多上下文来回答这个问题,因为答案集中在如何提供此边框方面。以下是更详细布局的屏幕截图。我起初不想包含这个截图,因为它会增加问题的复杂性: 您在此处看到的前5dp填充用于此整个项目(relativelayout)的内容。然后,如我最初所说的那样,“我可以使线性布局(或图像本身)具有填充”,除了您在relativelayout中看到的第一个填充之外。目前,此布局不应显示任何边框。
.9png
图像),或者简单地使用shape
。 - Vinay W