2010-11-30 78 views
16

我怎样才能让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相同的大小?

回答

0

如果您的图像适合转换为可伸缩的9补丁图像,那么这样做会导致背景围绕TextView进行缩放。

+0

是的,不幸的是我的图像没有平铺,并且不适用于9贴片。 – Petrus 2010-11-30 13:29:39

+0

我不确定这是否正确...我仍然看到使用9补丁时发生同样的问题。这9个补丁将会扩展,但似乎不会缩小。 – greg7gkb 2012-02-06 19:00:34

3

您可以创建一个FrameLayout并将ImageView和您的LinearLayout放在那里。所以你可以配置你的背景图片的布局。

+2

在该ImageView中,我将width和height设置为match_parent,将Tpye设置为fitXY并启用adjustViewBounds。作品! – sulai 2012-10-17 11:08:35

0

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

18

好的,所以这个线程有点老,但我有一个解决方案,有人可能有一天会觉得有用。我认为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

发生这种情况是因为Android视图基于其背景可绘制大小计算其最小大小。

检查my answer here在这个另一篇文章,涵盖了相同的问题,这将有助于您实现您的布局配置。

相关问题