RelativeLayout的行为与列表视图项不同

时间:2011-10-18 15:56:20

标签: android listview layout relativelayout xml-drawable

下午好机器人!

我正面临一个恼人的布局问题,经过数小时的调查后,我没有任何解释......:/。 我在这里创建了一个简化的测试用例。

我有一个简单的列表项布局。

list item http://www.freeimagehosting.net/4075a.jpg

lis item image link

XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/relativeLayout1"
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"
    android:minHeight="96dp">

<TextView android:layout_width="wrap_content"
    android:layout_height="wrap_content" 
    android:text="TextView"
    android:id="@+id/textView1" android:textAppearance="?android:attr/textAppearanceMedium"
    android:layout_centerVertical="true" android:layout_centerHorizontal="true" />

<TextView android:layout_width="wrap_content"
    android:layout_height="wrap_content" android:text="TextView"
    android:id="@+id/textView2" android:layout_alignParentTop="true" />

<ImageView 
    android:layout_width="10dp" 
    android:layout_height="match_parent"
    android:id="@+id/imageView1" 
    android:src="@drawable/errorindicator"
    android:layout_below="@id/textView2" />

</RelativeLayout>

errorindicator是一个红色矩形,您可以在左侧的图像上看到。 xml看起来像这样:

    <?xml version="1.0" encoding="utf-8"?>
    <shape shape="rectangle"  xmlns:android="http://schemas.android.com/apk/res/android">
     <solid android:color="@color/ControllingConflictColor" />
     <padding android:left="0dp" android:top="0dp" 
         android:right="0dp" android:bottom="0dp" />
    </shape>

所描述的列表项布局按预期工作。

现在我尝试用列表项填充列表视图,如上所述。结果如下:

list view with list items http://www.freeimagehosting.net/4cc4b.jpg

list view image link

相应的xml:

    <?xml version="1.0" encoding="utf-8"?>
    <ListView android:id="@+id/listView1" android:layout_width="fill_parent"
        android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android">
        <!-- Preview: listitem=@layout/test -->
    </ListView>

正如您在图像上看到的那样,红色矩形与高度中的父级不再匹配。图像是由设计师制作的,但同样的效果也在于模拟器和设备。我正在为API Level 8开发。

**如果有人能解释我,我会很高兴,为什么所描述的布局在列表视图中无法正常工作。为什么形状可绘制表现不同? **

感谢您的时间:)

编辑:我有嵌入图片的问题,我用了一个链接,抱歉;( 编辑:添加了xml-drawable标签。

编辑:我的示例甚至可以变得更加容易。我包含了两个文本视图,因为它与我的实际布局有一些相似之处。您可以从示例中删除两个文本视图,但仍存在问题,即如果在列表视图中使用布局,则图像视图中可绘制的形状与定义的父级高度不匹配。

3 个答案:

答案 0 :(得分:0)

我也发现使用RelativeLayout很难完成它。那么你的行xml尝试这个布局。它使用LinearLayout。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical">
    <TextView android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="TextView" 
        android:id="@+id/textView2" 
        android:layout_alignParentTop="true" />
    <LinearLayout android:layout_width="fill_parent"
        android:layout_height="wrap_content">
        <LinearLayout android:layout_width="10dip" 
            android:layout_height="fill_parent"
            android:background="@drawable/errorindicator"/>       
        <TextView android:layout_width="0dip" 
            android:layout_height="wrap_content" 
            android:text="TextView" android:layout_weight="1.0" 
            android:id="@+id/textView1"
            android:textAppearance="?android:attr/textAppearanceMedium" 
            android:gravity="center"/>
   </LinearLayout>
</LinearLayout>

答案 1 :(得分:0)

因为我认为给定布局管理器无法实现我想要的行为,所以我采用了另一种适合我个人情况的方式。

我已经覆盖了RelativeLayout的onDraw方法并自己绘制了这个红色矩形(在布局过程完成并设置了高度之后)......

答案 2 :(得分:0)

如果您将资产设为png,则可以对其进行9补丁并将其添加为RelativeLayout的背景