无需调整父布局大小的背景图像

时间:2013-12-11 11:10:43

标签: android android-layout

我有一个线性布局,layout_height设置为wrap_content,因此布局高度取决于其中的文本行数。

问题(这让我整个上午都疯了)是我想将图像设置为布局的背景,但为了确保图像可以在任何布局大小的情况下使用,我已经使图像相当大身高。如果布局很小,目标是在高度上裁剪图像。但我无法做到这一点:无论我尝试什么,布局都会根据图像高度调整大小。

那么,我怎样才能将图像设置为某种东西的背景,而是裁剪自身以便不重新设置父版面(当然,我不知道父版面大小,因为它取决于里面的文本)。

由于英语不是我的第一语言,希望我的问题很明确......

提前谢谢。

编辑:一些代码示例和截图:

这是原始卡片,背景中没有图片。

Original

这是添加了图片视图的代码:

<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:src="@drawable/drill_background_img" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

    ... [Card Content Here]

    </LinearLayout>

</FrameLayout

...结果是我的卡被拉伸到我的图像的高度。但我不希望这样。我希望卡的大小相同。但是我无法降低图像高度,因为卡片可以有更多的文字而且更高,所以我的图像必须更高。

enter image description here

3 个答案:

答案 0 :(得分:1)

这是线性布局的代码,它将位于中心并调整内部文本的大小。 我测试了它。

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerVertical="true"
    android:orientation="vertical"
    android:layout_centerHorizontal="true"
    android:layout_marginLeft="25dp"
    android:layout_marginRight="25dp">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/tvInfo"
        android:textColor="#ffffff"
        android:background="@drawable/toast_frame"
        android:gravity="center" />
</LinearLayout>

尝试它应该工作。在这里,我使用的图像足够小,以适应最小的尺寸。 Android会自动拉伸它。对于这种情况,我使用9patch Images。要了解有关9patch的更多信息,请访问此Link from developer.android.com

Simple online tool to generate 9patch 另请检查this SO Answer

我已在此处上传了toast_frame.9.png文件,以便您可以使用我上面给出的代码进行测试 **编辑** 改变

<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent" >

<ImageView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:src="@drawable/drill_background_img" />

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

... [Card Content Here]

</LinearLayout>

</FrameLayout>

<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/drill_background_img">


<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

... [Card Content Here]

</LinearLayout>

</FrameLayout>

我希望这会奏效。

答案 1 :(得分:0)

我不认为您可以在将图像用作任何视图的“背景”属性时裁剪图像。 图像将始终拉伸以填充整个背景。通常对于背景,您应该使用Nine Patches。熟悉它,也许你可以改变你的功能或UI规范来使用它们而不是普通的图像。 我知道裁剪图像的唯一方法是在ImageView中,它的图像由“src”设置,而不是“背景”。

我通常会避免在可以改变大小的组件中使用固定大小的图像。您还必须记住,在Android中,当您考虑不同的方向,屏幕大小,屏幕密度时,几乎所有内容都会改变大小。

答案 2 :(得分:0)

我认为背景总是会调整大小以适应容器大小。但您可以使用FrameLayout或RelativeLayout和ImageView。

<RelativeLayout
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:clipChildren="true">
    <ImageView
       android:layout_width="wrap_content"
       android:layout_height="wrap_content" />
    <LinearLayout
       android:layout_width="wrap_content"
       android:layout_height="wrap_content">
       ...your content here...
    </LinearLayout>
</RelativeLayout>