Как сделать RatingBar, чтобы показать пять звезд

Я следую стандартным примерам добавления RatingBar. Чтобы контролировать количество звезд, я попытался использовать android:numStars="5". Проблема в том, что количество звезд вообще ничего не делает. В портретной манере я получаю 6 звезд, и когда я переворачиваю телефон, я получаю около 10 звезд. Я попытался установить количество звезд в моей Activity (myBar.setNumStars(5)), которое загружает xml, но также не было успеха с этим вариантом.

Итак, мой вопрос: как определить свой макет, чтобы он отображал только пять звезд? Установить numStars, похоже, не работает.

Спасибо заранее, Roland

Ответ 1

<RatingBar
            android:id="@+id/rating"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            style="?android:attr/ratingBarStyleSmall"
            android:numStars="5"
            android:stepSize="0.1"
            android:isIndicator="true" />

в коде

mRatingBar.setRating(int)

Ответ 2

Документация RatingBar.setNumStar гласит:

Устанавливает количество звезд, чтобы показать. Для того, чтобы они отображались правильно, рекомендуется, чтобы ширина макета этого виджета была переносимой.

Поэтому установка ширины макета на wrap_content должна решить эту проблему.

Ответ 3

Это сработало для меня: RatingBar должно быть внутри LinearLayout, кроме того, что ширина макета установлена ​​для обертывания содержимого для RatingBar.

Ответ 4

Кроме того, если вы установите layout_weight, это заменит атрибут numStars.

Ответ 5

<RatingBar
                    android:id="@+id/ratingBar"
                    style="@style/custom_rating_bar"
                    android:layout_width="wrap_content"
                    android:layout_height="35dp"
                    android:clickable="true"
                    android:numStars="5" 
                    />

Настроить количество звезд в файле XML... Не нужно указывать его в стилях или действии/фрагменте.... ВАЖНО: убедитесь, что вы помещаете WIDTH в качестве содержимого Wrap, а весы не включены.

Ответ 6

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

ratingBar.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));


избегайте, используя match_parent и fill_parent для ratingbar.
Надеюсь, что все будет полезно.

Ответ 7

Если вы используете

android:layout_width="match_parent"

Использовать wrap_content, и он будет показывать только set numStars:)

android:layout_width="wrap_content"

Ответ 8

Вы должны просто использовать numStars="5" в своем XML и установить android:layout_width="wrap_content".
Затем вы можете поиграть со стилями и прочим, но "wrap_content" в layout_width - вот что делает трюк.

Ответ 9

Даже я столкнулся с проблемой @Roland, я включил еще один атрибут

android:layout_alignParentRight="true" 

в объявлении RatingBar в XML. Этот атрибут предотвращал установку требуемых звезд и настройку NumStars

Сохраняйте сообщения о проблемах, с которыми вы сталкиваетесь!

Ответ 10

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

Удалите padding, вместо этого используйте layout_margin.

Ответ 11

Значение по умолчанию устанавливается с andoid: rating в макете xml.

Ответ 12

Чтобы показать простой рейтинг звезды в круглой фигуре, просто используйте этот код

public static String getIntToStar(int starCount) {
        String fillStar = "\u2605";
        String blankStar = "\u2606";
        String star = "";

        for (int i = 0; i < starCount; i++) {
            star = star.concat(" " + fillStar);
        }
        for (int j = (5 - starCount); j > 0; j--) {
            star = star.concat(" " + blankStar);
        }
        return star;
    }

И используйте его вот так

button.setText(getIntToStar (4));

Ответ 13

Вы можете добавить рейтинг по умолчанию пяти звезд в сторону макета xml

android:rating="5"

Изменить:

<RatingBar
        android:id="@+id/rb_vvm"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginBottom="@dimen/space2"
        android:layout_marginTop="@dimen/space1"
        style="@style/RatingBar"
        android:numStars="5"
        android:stepSize="1"
        android:rating="5" />

Ответ 14

<LinearLayout 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <RatingBar
        android:id="@+id/ruleRatingBar"
        android:isIndicator="true"
        android:numStars="5"
        android:stepSize="0.5"
        style="?android:attr/ratingBarStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
</LinearLayout>

Ответ 15

Я обнаружил, что RatingBar растягивается до максимального количества звезд, потому что он был заключен в таблицу с атрибутом android:stretchColumns = "*".

Как только я удалил stretchCoulumns со всех столбцов, RatingBar отображался в соответствии со значением android:numStars

Ответ 16

Другая возможность заключается в том, что вы используете рейтинг в адаптере вида списка

View android.view.LayoutInflater.inflate(int resource, ViewGroup root, boolean attachToRoot)

Ниже приведены параметры, необходимые для правильной работы всех атрибутов:

  • Установите root на parent
  • boolean attachToRoot как false

Пример:  convertView = inflater.inflate(R.layout.myId, parent, false);