我有一个线性布局,layout_height设置为wrap_content,因此布局高度取决于其中的文本行数。
问题(这让我整个上午都疯了)是我想将图像设置为布局的背景,但为了确保图像可以在任何布局大小的情况下使用,我已经使图像相当大身高。如果布局很小,目标是在高度上裁剪图像。但我无法做到这一点:无论我尝试什么,布局都会根据图像高度调整大小。
那么,我怎样才能将图像设置为某种东西的背景,而是裁剪自身以便不重新设置父版面(当然,我不知道父版面大小,因为它取决于里面的文本)。
由于英语不是我的第一语言,希望我的问题很明确......
提前谢谢。
编辑:一些代码示例和截图:
这是原始卡片,背景中没有图片。
这是添加了图片视图的代码:
<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
...结果是我的卡被拉伸到我的图像的高度。但我不希望这样。我希望卡的大小相同。但是我无法降低图像高度,因为卡片可以有更多的文字而且更高,所以我的图像必须更高。
答案 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>