Как уменьшить размер панели рейтинга?

130

В моей деятельности у меня есть несколько рейтинговых полос. Но размер этой планки такой большой! Как сделать его меньше?

редактировать

Благодаря Габриэлю Негуту я сделал это в следующем стиле:

<RatingBar
style = "?android:attr/ratingBarStyleSmall"
android:numStars = "5"
android:rating   = "4" />

Теперь размер уменьшен, но количество звездочек и рейтинг не действуют !!! Зачем? У меня 7 звезд, из них 6 выбрано.

Hesam
источник
Вы имеете в виду Seekbar? У меня установка высоты и ширины отлично работает. Вы можете разместить здесь свой фрагмент кода?
Шайлендра Сингх Раджават,
Я бы рекомендовал удалить «редактировать» и вместо этого сделать его принятым ответом. Тот или @GabrielNegut может отредактировать свой ответ, включив такое решение. Включение решения в вопрос как бы отнимает у вас опыт вопросов и ответов.
onebree
1
style="?android:attr/ratingBarStyleSmall"работает для меня.
Мухаммад Шахзад

Ответы:

163

Исходная ссылка, которую я опубликовал, теперь не работает (есть веская причина, по которой публикация только ссылок - не лучший способ). Вы должны стилизовать RatingBarлюбой ratingBarStyleSmallили собственный стиль, унаследованный от Widget.Material.RatingBar.Small(при условии, что вы используете Material Design в своем приложении).

Опция 1:

<RatingBar
    android:id="@+id/ratingBar"
    style="?android:attr/ratingBarStyleSmall"
    ... />

Вариант 2:

// styles.xml
<style name="customRatingBar"   
    parent="android:style/Widget.Material.RatingBar.Small">
    ... // Additional customizations
</style>

// layout.xml
<RatingBar
    android:id="@+id/ratingBar"
    style="@style/customRatingBar"
    ... />
Габриэль Негут
источник
21
или использование этого стиля style = "? android: attr / ratingBarStyleSmall" уменьшит размер.
Mightian
1
Но справа бесполезная лишняя прокладка! Как это убрать ?!
Доктор Джеки
Примечание: сделайте width = "wrap_content", чтобы избавиться от лишних звездочек
hkchakladar 08
73

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

 <RatingBar
        android:id="@+id/listitemrating"
        style="@android:attr/ratingBarStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:scaleX=".5"
        android:scaleY=".5"
        android:transformPivotX="0dp"
        android:transformPivotY="0dp"
        android:isIndicator="true"
        android:max="5" />
TechArcSri
источник
3
Я вошел в систему, чтобы проголосовать за ваш ответ относительно использования transformPivot для смягчения проблемы неравномерного заполнения. Спасибо!
imin
Наконец-то нет обивки !!
Удай
Отличный ответ! Спасибо!
валерибодак 02
2
Масштаб мешает выравниванию родственных представлений и разбалансирует поля и интервалы.
Prateek Gupta
63

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

  <RatingBar
    android:id="@+id/MyRating"
    style="?android:attr/ratingBarStyleSmall"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/getRating"
    android:isIndicator="true"
    android:numStars="5"
    android:stepSize="0.1" />
Пир Фахим Шах
источник
3
Что такое android: stepSize = "0.1"?
Дарвин
также проверьте мой ответ в конце этой страницы.
Developine
@HammadTariqSahi Это хорошо, так держать, но есть ли проблема в моем коде? Дайте мне знать, если есть что-нибудь, пожалуйста
Пир Фахим Шах
@PirFahimShah, спасибо, братан, я не проверял этот код. вы можете улучшить и стилизовать панель рейтинга, если будете следовать этому подходу.
Developine
42

Вы можете установить его в коде XML для RatingBar, использовать scaleXи scaleYсоответствующим образом настроить. «1.0» будет нормальным размером, и все, что находится в «.0», уменьшит его, также все, что больше «1.0», увеличит его.

<RatingBar
  android:id="@+id/ratingBar1"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:scaleX="0.5"
  android:scaleY="0.5" />
ZeWolfe15
источник
14
проблема в том, что панель рейтинга по-прежнему занимает ту же ширину и высоту, что и раньше, даже если значки меньше. Это вызывает проблемы с выравниванием, так как рядом с первым и последним значками есть множество левых и правых отступов. Например, если вы хотите, чтобы ваши значки были такими, как «XXXXX», после масштабирования они будут выглядеть так: «----- XXXXX -----», где «-» - это пустое место, а «X» - это значок. , Таким образом, ваша полоса рейтинга будет выглядеть так, как будто она
сдвинута
1
Я предполагаю, что вы используете относительную компоновку. Это больно, но вы можете настроить его, чтобы он занял правильное положение, используя, android:layout_marginRight и ему нравится делать это так, как вы хотите.
ZeWolfe15,
4
чтобы получить масштаб без создания отступа слева, добавьте android: transformPivotX = "0dp"
Дарвин
37

Приведенный ниже фрагмент помог мне изменить размер ratingBar

<RatingBar
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/ratingBar"
    style="?android:attr/ratingBarStyleIndicator"
    android:scaleX=".5"
    android:rating="3.5"
    android:scaleY=".5"
    android:transformPivotX="0dp"
    android:transformPivotY="0dp"
    android:max="5"/>

введите описание изображения здесь

Навид Ахмад
источник
2
как изменить цвет шкалы оценок для этой шкалы оценок: наполовину, полная заливка и пустой цвет?
Ганпат Калия
Параметр рейтинга используется для заполнения шкалы рейтинга, верно? Я использовал android: rating = "3.5", поэтому заполнено 3.5 звезды. вы можете установить до 5, потому что в xml установлено max = 5. Если вы хотите изменить цвета панели рейтинга, вам необходимо создать стиль в style.xml, см. Эту ссылку: stackoverflow.com/a/35914622/2915785
Навид Ахмад
как android: transformPivotX = "0dp" android: transformPivotY = "0dp" программно?
Салман Хаквани
1
@NaveedAhmad Но там бесполезная прокладка справа! Как это убрать ?!
Доктор Джеки
@ Мистер Хайд проверил стили raringbar stackoverflow.com/a/24407907/2915785
Навид Ахмад
10

Рабочий пример

             <RatingBar
                style="@style/RatingBar"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:numStars="5"
                android:rating="3.5"
                android:stepSize="0.5" />

и добавьте это в свой XML-файл стилей

<style name="RatingBar"   
parent="android:style/Widget.Material.RatingBar.Small">
<item name="colorControlNormal">@color/primary_light</item>
<item name="colorControlActivated">@color/primary_dark</item>
</style>

Таким образом, вам не нужно настраивать ratingBar.

Developine
источник
9

Проверьте мой ответ здесь . Лучший способ добиться этого.

 <style name="MyRatingBar" parent="@android:style/Widget.RatingBar">
   <item name="android:minHeight">15dp</item>
   <item name="android:maxHeight">15dp</item>
   <item name="colorControlNormal">@color/white</item>
   <item name="colorControlActivated">@color/home_add</item>
</style>

и использовать как

<RatingBar
    style="?android:attr/ratingBarStyleIndicator"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:isIndicator="false"
      android:max="5"
      android:rating="3"
      android:scaleX=".8"
      android:scaleY=".8"
      android:theme="@style/MyRatingBar" />
АМАН СИНГХ
источник
6
<RatingBar
  style="?android:attr/ratingBarStyleIndicator"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
/>
nafees4343
источник
5
Не могли бы вы рассказать, как вы пришли к решению?
onebree
Это не позволяет RatingBarизмениться.
CopsOnRoad 07
3

Если вы используете строку рейтинга в Linearlayout с weightSum. Убедитесь, что вы не должны назначать layout_weight полосе рейтинга. Вместо этого разместите панель рейтинга внутри относительного макета и придайте вес относительному макету. Сделайте ширину полосы рейтинга обтеканием содержимого.

<RelativeLayout
    android:layout_width="0dp"
    android:layout_weight="30"
    android:layout_gravity="center"
    android:layout_height="wrap_content">
        <RatingBar
            android:id="@+id/userRating"
            style="@style/Widget.AppCompat.RatingBar.Small"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:stepSize="1" />
</RelativeLayout>
Варнит Кумар М
источник
3

Используя Widget.AppCompat.RatingBar, у вас есть 2 стиля для использования; Indicatorи Smallдля больших и малых размеров соответственно. См. Пример ниже.

<RatingBar
    android:id="@+id/rating_star_value"
    style="@style/Widget.AppCompat.RatingBar.Small"
    ... />
Ugokoli
источник
2

Если вам нужен только стиль по умолчанию, убедитесь, что у вас следующая ширина / высота, иначе numStars могут испортиться:

android:layout_width="wrap_content"
android:layout_height="wrap_content"
Шон
источник
1
использование этого стиля style = "? android: attr / ratingBarStyleSmall" уменьшит размер
Mightian
2

В RatingBarатрибуте give:

style="?android:attr/ratingBarStyleIndicator" 
rajlaxmi_jagdale
источник
2

В RatingBarтеге добавьте эти две строчки

style="@style/Widget.AppCompat.RatingBar.Small"
android:isIndicator="false"
Мирза Хайдер
источник
0

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

    private LinearLayout generateRatingView (значение с плавающей запятой) {
        LinearLayout linearLayoutRating = новый LinearLayout (getContext ());
        linearLayoutRating.setLayoutParams (новый TableRow.LayoutParams (TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT));
        linearLayoutRating.setGravity (Gravity.CENTER);
        RatingBar ratingBar = новый RatingBar (getContext (), null, android.R.attr.ratingBarStyleSmall);
        ratingBar.setEnabled (ложь);
        ratingBar.setStepSize (Float.parseFloat ("0.5")); // для включения половинной звезды
        ratingBar.setNumStars (5);
        ratingBar.setRating (значение);
        linearLayoutRating.addView (ratingBar);
        return linearLayoutRating;
    }

Сачин Танпуре
источник
0
 <RatingBar     android:id="@+id/id_tv_rating_bar"
                style="@style/Widget.AppCompat.RatingBar.Small"
                android:layout_width="wrap_content"
                android:layout_height="@dimen/_20sdp"
                android:layout_marginLeft="@dimen/_80sdp"
                android:numStars="5"
                android:paddingTop="@dimen/_5sdp"
                android:rating="5" />

Просто используйте style="@style/Widget.AppCompat.RatingBar.Small"это, конечно же!

Пратик Гупта
источник
0

Это сработало для меня.
Проверить это изображение

            android:id="@+id/ratingBar"
            style="?android:attr/ratingBarStyleIndicator"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:numStars="5"
            android:scaleX=".8"
            android:scaleY=".8"
            android:stepSize="0.5"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.543"
            app:layout_constraintStart_toEndOf="@+id/title"
            app:layout_constraintTop_toTopOf="parent" />
Сайед Умайр
источник