Подтвердить что ты не робот

Как сделать меньший рейтингBar?

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

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

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

Но результат слишком мал и невозможно установить скорость с этим свойством.

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

4b9b3361

Ответ 1

Виджет DefaultBar по умолчанию - sorta 'lame.

Источник ссылается на стиль "?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

Ответ 2

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

Шаг-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"    
/>  

Ответ 3

Просто используйте:

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

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

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

android:transformPivotX="0dp"

Ответ 4

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

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

Ответ 5

малый один реализует ОС

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

Ответ 6

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

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

Ответ 7

примените это.

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

Ответ 8

<RatingBar
    android:id="@+id/rating_bar"
    style="@style/Widget.AppCompat.RatingBar.Small"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

Ответ 9

Использовать этот код

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

Ответ 10

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

Ответ 11

хотя ответ Farry работает, для устройств 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>

Ответ 12

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

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

Ответ 13

используйте следующий код для небольшой рейтинговой панели с событием 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" />

Ответ 14

Попробуйте использовать некоторую библиотеку для строки рейтинга, например, библиотеку оценки материала Android.

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

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

2. Определите собственный стиль в вашем файле styles.xml:

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

3. Добавьте RatingBar в свой макет и примените этот стиль через атрибут 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"/>

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

Ответ 15

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

xxhdpi - 48 * 48 пикселей

xhdpi - 36 * 36 пикселей

hdpi - 24 * 24 px

И в стиле поставьте minheight и maxheight как 16 dp для всех Resolution.

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

Ответ 16

Лучший ответ, который я получил

  <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

Ответ 17

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

Ответ 18

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

    private LinearLayout generateRatingView(float value){
        LinearLayout linearLayoutRating=new LinearLayout(getContext());
        linearLayoutRating.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT));
        linearLayoutRating.setGravity(Gravity.CENTER);
        RatingBar ratingBar = new RatingBar(getContext(),null, android.R.attr.ratingBarStyleSmall);
        ratingBar.setEnabled(false);
        ratingBar.setStepSize(Float.parseFloat("0.5"));//for enabling half star
        ratingBar.setNumStars(5);
        ratingBar.setRating(value);
        linearLayoutRating.addView(ratingBar);
        return linearLayoutRating;
    }

Ответ 19

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