如何包装内容视图而不是背景可绘制?

时间:2010-11-30 09:21:18

标签: android background

如何让LinearLayout(或任何其他ViewGroup)假设其子视图的大小而不是假设背景图像的大小?

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="@drawable/large_image300x300pix">

 <TextView android:id="@+id/TextView01" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Hello world!"/>
</LinearLayout>

线性布局与背景图像的大小相同。 如何让我的线性布局与textview具有相同的大小?

5 个答案:

答案 0 :(得分:21)

好的,所以这个帖子有点陈旧,但我有一个解决方案,有人可能有一天会觉得有用。我认为Android在缩小大图像方面存在问题,因此LinearLayout大小最终会受到背景可绘制位图的影响,而ImageView最终会强制增加父容器的大小。

除非您使用相对布局。即使ImageView位于父级布局的后面,也可以使ImageView相对于LinearLayout的位置。我的解决方案看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    xmlns:android="http://schemas.android.com/apk/res/android">
<ImageView
    android:src="@drawable/activation_popup"
    android:scaleType="fitXY"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:layout_alignTop="@+id/activation_layout"
    android:layout_alignBottom="@id/activation_layout"
    android:layout_alignLeft="@id/activation_layout"
    android:layout_alignRight="@id/activation_layout"
    android:contentDescription="@string/act_code_label" />
<LinearLayout
    android:id="@id/activation_layout"
    android:clipToPadding="true"
    android:padding="25dp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical" >
    <!-- LinearLayout wraps a bunch of smallish views here -->
</LinearLayout>
</RelativeLayout>

我在显示尺寸和操作系统版本的顶部试过这个,似乎效果很好。请注意,LinearLayout中的填充是为背景图像图形中的阴影边框腾出空间的技巧。 LinearLayout不需要任何相对定位,因为假定左上角。

答案 1 :(得分:4)

您可以创建FrameLayout并将ImageViewLinearLayout放在那里。因此,您将能够配置背景图像的布局。

答案 2 :(得分:1)

这是因为Android视图根据其背景可绘制大小计算其最小大小。

在另一篇文章中检查my answer here,其中包含相同的问题,可帮助您实现布局配置。

答案 3 :(得分:0)

如果您的图像适合转换为可缩放的9-patch图像,那么这样做会导致背景在TextView周围缩放。

答案 4 :(得分:0)

我相信这里最好的解决方案是设置android:clipToPadding =“true”。它的作用是排除主布局的填充并将布局包装到其子代。