Как сделать меньшую рейтинговую панель?


я добавил RatingBar в макете:

<RatingBar 
    android:id="@+id/ratingbar"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:numStars="5"
    android:stepSize="1.0"
    />  

но стиль по умолчанию для строки рейтинга слишком велик.
Я попытался изменить его, добавив стиль android:style="?android:attr/ratingBarStyleSmall"

но результат слишком мал, и невозможно установить скорость с помощью этого свойства.

Как я мог это сделать?

18 123

18 ответов:

виджет RatingBar по умолчанию-это своего рода "хромой".

источник ссылается на стиль "?android:attr/ratingBarStyleIndicator" в дополнение к "?android:attr/ratingBarStyleSmall" что вы уже знакомы. ratingBarStyleIndicator немного меньше, но это все еще довольно уродливо, и комментарии отмечают, что эти стили "не поддерживают взаимодействие".

вы, вероятно, лучше-от прокатки самостоятельно. Есть приличный гид на http://kozyr.zydako.net/2010/05/23/pretty-ratingbar/ показывая, как это сделать этот. (Я еще не сделал этого сам, но попытаюсь через день или около того.)

удачи!

p.s. извините, собирался разместить ссылку на источник для вас, чтобы совать вокруг, но я новый пользователь и не могу разместить более 1 URL. Если вы копаете свой путь через исходное дерево, оно находится в frameworks/base/core/java/android/widget/RatingBar.java

Как склеить данный код здесь ...

Шаг 1. Вам нужен свой собственный рейтинг звезды в res/drawable ...

A full star

Empty star

Шаг-2 В res/drawable вам нужно ratingstars.xml как следовать ...

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@android:id/background"
          android:drawable="@drawable/star_empty" />
    <item android:id="@android:id/secondaryProgress"
          android:drawable="@drawable/star_empty" />
    <item android:id="@android:id/progress"
          android:drawable="@drawable/star" />
</layer-list>

Шаг-3 В res/values вам нужно styles.xml как следовать ...

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="foodRatingBar" parent="@android:style/Widget.RatingBar">
        <item name="android:progressDrawable">@drawable/ratingstars</item>
        <item name="android:minHeight">22dip</item>
        <item name="android:maxHeight">22dip</item>
    </style>
</resources>

Шаг-4 в макете ...

<RatingBar 
      android:id="@+id/rtbProductRating"
      android:layout_height="wrap_content"
      android:layout_width="wrap_content"
      android:numStars="5"
      android:rating="3.5"
      android:isIndicator="false"
      style="@style/foodRatingBar"    
/>  

просто использовать:

android:scaleX="0.5"
android:scaleY="0.5"

изменить коэффициент масштабирования в соответствии с вашими потребностями.

для масштабирования без создания отступа слева также добавьте

android:transformPivotX="0dp"

нет необходимости добавлять слушателя к ?android:attr/ratingBarStyleSmall. Просто добавить android:isIndicator=false и он будет фиксировать события click, например,

<RatingBar
  android:id="@+id/myRatingBar"
  style="?android:attr/ratingBarStyleSmall"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:numStars="5"
  android:isIndicator="false" />

маленькая реализация ОС

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

Я нашел более простое решение, чем я думаю, приведенные выше и легче, чем собственное. Я просто создал небольшую рейтинговую панель, а затем добавил к ней onTouchListener. Оттуда я вычисляю ширину щелчка и определяю количество звезд от этого. Используя это несколько раз, единственная причуда, которую я нашел, заключается в том, что рисование небольшой рейтинговой панели не всегда получается прямо в таблице, если я не заключаю ее в LinearLayout (выглядит прямо в редакторе, но не на устройстве). Во всяком случае, в моем макете:

            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" >
                <RatingBar
                    android:id="@+id/myRatingBar"
                    style="?android:attr/ratingBarStyleSmall"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:numStars="5" />
            </LinearLayout>

и в рамках своей деятельности:

    final RatingBar minimumRating = (RatingBar)findViewById(R.id.myRatingBar);
    minimumRating.setOnTouchListener(new OnTouchListener()
    { 
        public boolean onTouch(View view, MotionEvent event)
        { 
            float touchPositionX = event.getX();
            float width = minimumRating.getWidth();
            float starsf = (touchPositionX / width) * 5.0f;
            int stars = (int)starsf + 1;
            minimumRating.setRating(stars);
            return true; 
        } 
    });

Я надеюсь, что это поможет кому-то еще. Определенно проще, чем рисовать свои собственные (хотя я обнаружил, что это также работает, но я просто хотел легко использовать звезды).

применить.

<RatingBar android:id="@+id/indicator_ratingbar"
    style="?android:attr/ratingBarStyleIndicator"
    android:layout_marginLeft="5dip"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_vertical" />
<RatingBar
    android:id="@+id/rating_bar"
    style="@style/Widget.AppCompat.RatingBar.Small"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

Используйте Этот Код

<RatingBar
    android:id="@+id/ratingBarSmalloverall"
    style="?android:attr/ratingBarStyleSmall"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_centerVertical="true"
    android:layout_marginRight="30dp"
    android:isIndicator="false"
    android:numStars="5" />
<RatingBar
    android:id="@+id/ratingBar1"
    android:numStars="5"
    android:stepSize=".5"
    android:rating="3.5"
    style="@android:style/Widget.DeviceDefault.RatingBar.Small"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

лучший ответ для небольшой рейтинговой панели

<RatingBar
                    android:layout_width="wrap_content"
                    style = "?android:attr/ratingBarStyleSmall"
                    android:layout_height="wrap_content" />

хотя ответ Фарри работает,для устройств Samsung RatingBar взял случайный синий цвет вместо определенного мной. Так что используйте

style="?attr/ratingBarStyleSmall"

вместо.

полный код как использовать:

<android.support.v7.widget.AppCompatRatingBar
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                style="?attr/ratingBarStyleSmall" // use smaller version of icons
                android:theme="@style/RatingBar"
                android:rating="0"
                tools:rating="5"/>

<style name="RatingBar" parent="Theme.AppCompat">
        <item name="colorControlNormal">@color/grey</item>
        <item name="colorControlActivated">@color/yellow</item>
        <item name="android:numStars">5</item>
        <item name="android:stepSize">1</item>
    </style>

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

xxhdpi-48*48 px

xhdpi-36*36 px

hdpi-24*24 px

и в типе положите minheight и maxheight как dp 16 для всего разрешения.

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

используйте следующий код для небольшой рейтинговой панели с событием onTouch

enter code here


<RatingBar
            android:id="@+id/ratingBar"
            style="?android:ratingBarStyleSmall"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:isIndicator="false"
            android:rating="4"
            android:stepSize="0.5" />

попробуйте использовать некоторые библиотеки для рейтинговой панели, например Android Материал Рейтинг Бар библиотека.

1.Добавьте в свои зависимости:

compile 'me.zhanghai.android.materialratingbar:library:1.2.0'

2.Объявите пользовательский стиль в ваших стилях.xml-файл:

<style name="RatingBar" parent="Theme.AppCompat">  
    <item name="colorControlNormal">@color/indigo</item>
    <item name="colorControlActivated">@color/pink</item>
</style>  

3.Добавьте панель рейтингов в свой макет и примените этот стиль с помощью атрибута android:theme:

<me.zhanghai.android.materialratingbar.MaterialRatingBar
    android:id="@+id/rating_bar"
    android:layout_width="wrap_content"
    android:layout_height="22dp"
    android:isIndicator="true"
    android:numStars="5"
    android:rating="0"
    android:stepSize="0.1"
    android:theme="@style/RatingBar"/>

Если вы хотите изменить размер панели рейтингов с помощью этой библиотеки, просто измените android: layout_height и android:layout_width на ваше усмотрение.

лучший ответ я получил

  <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" />

увеличение / уменьшение размеров с помощью scaleX и scaleY стоимостью

его работа для меня в рейтинг бар xml style="?android: attr / ratingBarStyleSmall " добавить this.it будет работать.

Я решаю эту проблему следующим: стиль="?android: attr / ratingBarStyleSmall"