当与TextView在同一个TableRow上时,RatingBar在Android中显示不正确

时间:2011-01-17 22:39:47

标签: android android-layout

所以我使用TableLayout获得了Android 1.6活动。其中一行有一个RatingBar in。这是我的xml:

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <TableRow>
        <TextView android:text="name"
            android:padding="3dip"/>
        <TextView android:text="@+id/name"
            android:padding="3dip"/>
    </TableRow>
    <TableRow>  
        <TextView android:text="tags"
            android:padding="3dip"/>
        <TextView android:id="@+id/tags"
            android:padding="3dip"/>
    </TableRow>
    <TableRow>
        <TextView android:text="rating"
            android:layout_width="wrap_content"/>
        <RatingBar android:id="@+id/rating"
            style="?android:attr/ratingBarStyleIndicator"
            android:layout_width="wrap_content"
            android:rating="4"
        android:numStars="5"/>
    </TableRow>
    <TableRow>
        <TextView android:text="long string"
            android:padding="3dip"/>
        <TextView android:text="this is a very very very long string"
            android:padding="3dip"/>
    </TableRow>

...
</TableLayout>

我想在表格行的左侧放置一个文字标签,然后在右边有一个5星评级栏。但是当我这样做时,评级值显示错误,并且我有很多虚假的空星超过指定的最大值5:

alt text

如果我取出'评级'TextView,那么RatingBar在它自己的表格行上,RatingBar按预期显示,显示5个可能的星星中有4个:

alt text

有没有人知道是否可以在与TextView相同的行上安装RatingBar?或者我是否需要重新考虑这种布局?

编辑添加:我认为表中显示长文本字符串的另一行导致了问题。如果没有上面示例中的“长字符串”行,则RatingBar会在与“评级”文本相同的行中正确显示。

2 个答案:

答案 0 :(得分:3)

修好了!

我只需要在'长字符串'列上设置最大宽度,即

<TableRow>
    <TextView android:text="long string"
        android:padding="3dip"/>
    <TextView android:text="this is a very very very long string"
        android:layout_width="wrap_content"
        android:maxWidth="100dip"
        android:padding="3dip"/>
</TableRow>  

我认为RatingBar需要在表格单元格中限制其空间 - 如果它被另一个组件给予太多空间,它将扩展以填充它,并产生意想不到的后果。

答案 1 :(得分:2)

我认为星级可能会改变大小的原因是由于TableRow自动扩展以适合其父级(与其相邻表行的关系)的方式

您的问题中没有显示您的TableLayout元素,因此如果以下内容无法帮助您解决问题,则可能需要添加该元素。

在TableLayout中,您可以指定缩小和拉伸列元素。您列出要缩小或展开的列索引。第一列是索引0。

<TableLayout android:shrinkColumns="1,0" android:stretchColumns="0,1"></TableLayout>

您不需要列出这两个属性,并且可能更容易尝试使用这些属性来找出适合您的方法。请注意,如果您拉伸列,我认为它们会拉伸以匹配父级,在这种情况下,您可能会发现列消失。

我想你会想要缩小你的星级评分第二列。

希望有所帮助。