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

时间:2011-08-23 15:12:13

标签: android android-layout

我尝试为GoogleMaps实施Map View balloon,但我阻止了气球的布局 气球的大小必须是内容大小,但是,它需要背景可绘制的大小,因为它更大。因为我有一个非常大的气球9-patch image,由其他人提供,一个小气球内容占据所有屏幕(可绘制的大小)。

我看到了这个相关问题:How to wrap content views rather than background drawable?,这正是我想要的,但它没有正确答案(使用FrameLayout会产生同样的问题,因为ImageView src会使用wrap_contentfill_parent来获取可绘制的大小。

这是我的布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="wrap_content" android:id="@+id/balloon_main_layout"
    android:orientation="horizontal" android:clickable="true"
    android:focusable="true" android:focusableInTouchMode="true"
    android:layout_width="wrap_content" android:background="@drawable/info_bulle_selector">
    <LinearLayout android:id="@+id/linearLayout1"
        android:layout_height="wrap_content" android:layout_width="0dp"
        android:layout_weight="1">
        <TextView android:layout_height="wrap_content"
            android:layout_width="wrap_content" android:text="TextView"
            android:id="@+id/balloon_item_title" android:textColor="#ffffff"></TextView>
    </LinearLayout>
    <ImageView android:id="@+id/balloon_close"
        android:layout_marginLeft="5dp" android:src="@drawable/fermer_selector"
        android:scaleType="fitXY" android:layout_height="30dp"
        android:layout_width="30dp"></ImageView>
</LinearLayout>

这是我所拥有的屏幕(必须删除红色空间):
Current baloon layout

如果您有任何想法解决这个问题(我在设计带背景图像的布局时经常会遇到这个问题),那就太棒了。
提前致谢。

编辑:
这里是九补丁png: nine-patch balloon

1 个答案:

答案 0 :(得分:2)

当我理解你的问题时,你有两个选择:

1)使气球9-patch图像更小,尤其是9-patch图像的不可伸缩和填充区域,因此它可以更好地适应较小的内容。有关更多文档,请参阅:http://developer.android.com/guide/topics/graphics/2d-graphics.html#nine-patch

编辑:

正如我在第1点中所注意到的,你的9补丁图片太大了。它的宽度为330像素,高度为74像素。由于您的内容未填满整个背景图片的宽度和高度,因此您的布局中会有空格。

作为一种可能的解决方案,请缩小您的9补丁图像。我将图像缩小到150px的宽度和34px的高度,我得到了以下结果:

screen shows 3 balloons with different contents

这是缩小的9补丁图像: enter image description here