每当我将背景分配给使用wrap_content布局的视图时,如果背景图像大于视图,则视图会被拉伸,以便它可以保持整个背景。为什么会如此以及如何预防呢?即使图像是9-patch并且标记了可伸展区域,也会出现这种情况 - 为什么图像缩小到视图大小?
答案 0 :(得分:9)
您可以使用RelativeLayout并在其中创建两个元素。用于背景的ImageView和用于内容的另一个视图。将android:layout_alignBottom
用于ImageView,并将值设置为内容视图的ID。还要将ImageView的scaleType设置为fitXY。
<RelativeLayout android:id="@+id/relativeLayout1"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_width="fill_parent">
<ImageView android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:scaleType="fitXY"
android:src="@drawable/chronometer_bg"
android:id="@+id/imageView_chronometerBackground"
android:layout_alignBottom="@id/chronometer" />
<Chronometer android:text="Chronometer"
android:id="@+id/chronometer"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:textSize="32sp"
android:gravity="center" />
</RelativeLayout>
答案 1 :(得分:2)
覆盖布局视图的方法getSuggestedMinimumWidth和getSuggestedMinimumHeight,或者背景drawable的方法getMinimumWidth和getMinimumHeight来实现这一目标。
答案 2 :(得分:0)
您可以尝试将宽度和高度设置为60dp
而不是wrap_content
,并使用android:scaleType
。
答案 3 :(得分:0)
您可以使用带有ImageView的FrameLayout作为第一个元素,而不是使用背景。然后使用android:scaleType =“center”,这样图像就不会缩放。它始终是原始尺寸,并且居中。然后你可以在FrameLayout中放置你喜欢的任何视图。
答案 4 :(得分:0)
这可能是一个疯狂的想法,但如何创建这样的特殊九补丁图像:
这样,您将水平放置2个可伸展区域,垂直放置2个空边框。因此,图像的中心(您的原始图像保持未缩放)
不过,这可能不是最好的解决方案,但由于其他人已经列出了很好的解决方案,我想我也加上了这个解决方案; - )答案 5 :(得分:0)
为什么会这样?因为您将宽度设置为wrap_content
。
你怎么能阻止它:
一个。设置maxWidth
属性。
湾尝试将ImageView
与wrap_content
放在具有固定宽度的布局中。
℃。 (我经常使用TableLayout作为其shrinkColumns和stretchColumns属性对于这样的事情很方便。也许这对你也有用。)
太多帮助,需要一些XML。