所以我使用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:
如果我取出'评级'TextView,那么RatingBar在它自己的表格行上,RatingBar按预期显示,显示5个可能的星星中有4个:
有没有人知道是否可以在与TextView相同的行上安装RatingBar?或者我是否需要重新考虑这种布局?
编辑添加:我认为表中显示长文本字符串的另一行导致了问题。如果没有上面示例中的“长字符串”行,则RatingBar会在与“评级”文本相同的行中正确显示。
答案 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>
您不需要列出这两个属性,并且可能更容易尝试使用这些属性来找出适合您的方法。请注意,如果您拉伸列,我认为它们会拉伸以匹配父级,在这种情况下,您可能会发现列消失。
我想你会想要缩小你的星级评分第二列。
希望有所帮助。