【发布时间】:2012-12-18 22:23:18
【问题描述】:
注意:我最终将此作为一个错误报告给 android 项目:http://code.google.com/p/android/issues/detail?id=39159 另请查看接受的赏金答案,不幸的是,解决方案是使用绝对值(即指定 'dp's 而不是比 'wrap_content' 等)布局来解决问题。
在图像上放置背景时,我遇到了一些非常奇怪的行为。我已经大大简化了这一点,以向您展示这个问题。我正在做的是将图像放置在相对布局中,并使用背景。似乎给 relativelayout 一个填充会导致图像的背景被误绘。 Wrap_content 似乎搞砸了。
首先,这里是演示问题的代码。请注意,在不使用线性布局的情况下会看到相同的行为,而只是为图像视图提供背景,但这确实更好地说明了问题。
<?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>
这里是 red_rectangle:
请注意,这是一个参考图像,用于演示问题。我的实际图像有细节,所以不能是 .9.png
这是问题的截图:
您可以看到图像宽度小于线性布局,尽管线性布局的宽度设置为“wrap_content”。如果我将 relativelayout 填充设置为 0dp,这个问题就会消失。
希望这是我在这里提供的一组相当完善的资源,因此人们可以根据需要自行尝试。
作为参考,我使用它在图像周围提供边框,因此我可以将线性布局(或图像本身)设置为具有填充,在这种情况下问题仍然存在。
编辑:看来我可能需要更多关于此的上下文,因为答案集中在如何提供此边框上。这是一个更符合上下文的布局的屏幕截图。我一开始就不想包括这个,因为它给问题增加了更多的混乱:
您看到的第一个 5dp 内边距是针对整个项目的内容(相对布局)。然后,正如我最初所说的那样,除了您在相对布局中看到的第一个填充之外,“我可以将线性布局(或图像本身)设置为具有填充”。目前,此布局不应显示任何边框。
【问题讨论】:
-
图像的分辨率是您的问题。使用可以扩展的图像.. 像 Vector(例如,
.9png图像),或者只是一个shape。 -
请注意,这是一个参考图像,用于演示问题。我的实际图像有细节,所以不能是 .9.png
-
我可以看到您没有得到预期的结果,但您的要求并不清楚。您期望的布局是什么以及您想如何使用它。
-
预期的布局是看不到黑色。然后对于某些布局,我可以在线性布局(或图像视图本身,如果我将背景放在上面)上设置填充并获得边框。