RatingBar неправильно отображается в Android, когда на той же TableRow, что и TextView - PullRequest
4 голосов
/ 18 января 2011

Итак, у меня есть активность Android 1.6 с использованием TableLayout.В одной из строк есть RatingBar. Это мой 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 отображается, как и ожидалось, показывая 4 из 5 возможных звездочек:

alt text

Кто-нибудь знает, если это возможноесть RatingBar в той же строке, что и TextView?Или мне нужно переосмыслить этот макет?

отредактировано, чтобы добавить: я думаю, что другая строка в таблице, которая отображает длинную текстовую строку, вызывает проблему.Без строки 'long string' в приведенном выше примере RatingBar правильно отображается в той же строке, что и текст 'rating'.

Ответы [ 2 ]

3 голосов
/ 21 января 2011

исправил это!

Мне просто нужно было установить максимальную ширину в столбце 'длинная строка', т. Е.

<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 нужно ограничить его пространство вячейка таблицы - если другой компонент предоставит ей слишком много места, она будет расширена, чтобы заполнить ее, что приведет к неожиданным последствиям.

2 голосов
/ 21 января 2011

Я думаю, что причина, по которой звездный рейтинг может изменить размер, связана с тем, что TableRow автоматически расширяется, чтобы соответствовать его родителю (по отношению к соседним строкам таблицы).задайте вопрос об элементе TableLayout, так что вы можете добавить, что если следующее не поможет вам решить вашу проблему.

В TableLayout вы можете указать элементы столбцов сжатия и растяжения.Вы перечисляете индекс столбца, который хотите сжать или расширить.Первый столбец с индексом 0.

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

Вам не нужно указывать оба свойства, и, вероятно, проще поэкспериментировать с ними, чтобы выяснить, что работает для вас.Просто имейте в виду, что если вы растягиваете столбцы, я думаю, что они растягиваются, чтобы соответствовать родителю, и в этом случае вы можете обнаружить, что столбец исчезает.

Я думаю, что вы захотите уменьшить 2-ую колонку с вашим рейтингом в ней.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...