无论何时,当我将背景分配给一个使用wrap_content布局的视图时,如果背景图片大于该视图,则该视图会被拉伸以容纳整个背景。为什么会这样,如何防止呢?即使图片是9-patch并且有可拉伸的区域标记,它仍会发生-为什么图片不会缩小到视图的大小?
您可以使用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>
为什么会这样呢?因为你将宽度设置为wrap_content
。
如何避免:
a. 设置maxWidth
属性。
b. 尝试将带有wrap_content
的ImageView
放置在具有固定宽度的布局中。
c.(我经常使用TableLayout,因为它的shrinkColumns和stretchColumns属性对于此类事情非常方便。也许这对你也有用。)
为了更好地帮助您,需要一些XML。
你可以尝试将宽度和高度设置为类似于60dp
而不是wrap_content
,并使用android:scaleType
。
不要使用背景,而是使用一个带有 ImageView 作为第一个元素的 FrameLayout。然后使用 android:scaleType="center",这样图像就不会缩放。它将始终保持其原始大小并居中显示。然后您可以在 FrameLayout 中放置任何您喜欢的视图。
这可能是一个疯狂的想法,但是怎么样创建一个特殊的九宫格图片呢:
这样你就会有2个水平的可拉伸区域和2个垂直的可拉伸区域,即空白边框。因此,图像的中心部分(即原始图像)保持不缩放。
顺便说一句,这可能不是最好的解决方案,但既然其他人已经列出了好的解决方案,我想也加上这个;-)