Как я могу установить цвет звездочек на панели рейтинга?

Как я могу установить цвет звездочек на панели рейтинга? Я хочу желтые звезды.


person Finn Su    schedule 02.08.2013    source источник
comment
Попробуйте следующее: Android RatingBar изменяет цвета звездочек.   -  person Vikram    schedule 02.08.2013
comment
Найдите самый простой способ, если вы используете действие AppCompat stackoverflow.com/questions/2446270/   -  person Vishal Kumar    schedule 30.03.2016


Ответы (10)


Самый простой способ:

android:progressTint="@color/color"

Гладкая и блестящая.

person MiguelCatalan    schedule 26.12.2015
comment
@suku да, но в вопросе не упоминались какие-либо ограничения в отношении minSDK. - person MiguelCatalan; 05.02.2016

Это сработало для меня:

    Drawable drawable = ratingBar.getProgressDrawable();
    drawable.setColorFilter(Color.parseColor("#FFFDEC00"), PorterDuff.Mode.SRC_ATOP);
person Chad Bingham    schedule 04.09.2015
comment
мне нравится этот ответ, в этом вам не понадобятся пользовательские звезды. Мне просто нужно изменить цвет, так как вопрос не в звездах. Единственным недостатком является один цвет, я думаю, нужно будет изменить и другие рисунки. - person Jayshil Dave; 23.09.2015

Я обнаружил, что просто установка progressTint не является полным решением. Он изменит цвет звезды, но не при частичном заполнении звезд, если ваш stepSize меньше 1. По моему опыту, вам также необходимо установить вторичный цвет ProgressTint, чтобы не дать звездному оттенку по умолчанию поднять свою уродливую голову. Вот мой код:

android:progressTint="@color/accent"
android:secondaryProgressTint="@android:color/transparent"

Надеюсь, это поможет кому-то в моей ситуации.

person Franklin Kesler    schedule 14.02.2016
comment
Вы также должны установить android:progressBackgroundTint для пустой звезды. - person chubao; 06.06.2016
comment
Атрибуты progressTint и secondaryProgressTint используются только в уровне API 21 и выше. - person ViliusK; 18.07.2016
comment
@ViliusK, как лучше всего заставить это работать для всех версий API Android - person Pallavi; 10.09.2016

Вы пробовали тему 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_show"/>

    <item
    android:id="@android:id/secondaryProgress"
    android:drawable="@drawable/star_empty_show"/>

    <item
    android:id="@android:id/progress"
    android:drawable="@drawable/star_filled_show"/>

</layer-list>

вызывая его в своем xml как

<RatingBar
        android:id="@id/rate"
        style="?android:attr/ratingBarStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginRight="5.0dip"
        android:isIndicator="true"
        android:max="5"
        android:numStars="5"
        android:progressDrawable="@drawable/ratebar_theme"
        android:stepSize="0.1" />

и используя свои собственные чертежи?

person kwishnu    schedule 02.08.2013
comment
Привет, kwishnu, я пробовал это решение, но когда я пытаюсь установить рейтинг на что-то вроде 1,1, 1,2 и т. Д., Он отображается как 1,5. Я сделал 3 звездных изображения, одно пустое, одно наполовину полное и одно полное. Я предполагаю, что он должен интерполировать между ними, чтобы получить дробные компоненты, мне просто интересно, была ли у кого-нибудь еще такая же проблема, или я делаю что-то заметно неправильно? - person Graham Baitson; 10.01.2014

Вам нужны 3 звездных изображения (star_filled_show.png, star_half_show.png и star_empty_show.png) и один xml, вот и все.

Поместите эти 3 изображения в res/drawable.

Поместите туда следующее ratingbarstars.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_show"/>

<item
android:id="@android:id/secondaryProgress"
android:drawable="@drawable/star_half_show"/>

<item
android:id="@android:id/progress"
android:drawable="@drawable/star_filled_show"/>
</layer-list>

Сообщите своему определению рейтинга, чтобы использовать этот рисунок

<RatingBar android:progressDrawable="@drawable/ratingbarstars.xml"/>
person OrchTech    schedule 10.11.2014

Панель рейтинга используется автоматически во время выполнения для изменения цвета сенсорной звезды.

Сначала добавьте стиль в файл app\src\main\res\values\styles.xml:

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

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

<RatingBar
android:id="@+id/rating"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:numStars="5"
android:stepSize="1"
android:theme="@style/RatingBar"/>
person Navadip Patel    schedule 23.08.2017

В упомянутом блоге это немного сложно, я использовал аналогичный, но более простой способ. Вам нужны изображения с тремя звездочками (red_star_full.png, red_star_half.png и red_star_empty.png) и один xml, вот и все.

Поместите эти 3 изображения в res/drawable.

Поместите туда следующий ratingbar_red.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/red_star_empty" />
    <item android:id="@android:id/secondaryProgress" android:drawable="@drawable/red_star_half" />
    <item android:id="@android:id/progress" android:drawable="@drawable/red_star_full" />
</layer-list>

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

<RatingBar android:progressDrawable="@drawable/ratingbar_red"/>

Вот и все.

person Suneel Kumar    schedule 14.05.2015

Попробуй это

RatingBar ratingBar = (RatingBar) findViewById(R.id.ratingBar);
LayerDrawable stars = (LayerDrawable) ratingBar.getProgressDrawable();
stars.getDrawable(2).setColorFilter(Color.YELLOW,PorterDuff.Mode.SRC_ATOP);
person Anand Savjani    schedule 01.09.2015
comment
Как насчет того, когда звезда наполовину заполнена? Я хочу, чтобы звезда была наполовину желтой, а наполовину серой — или что-то в этом роде. - person iOSAndroidWindowsMobileAppsDev; 12.10.2016
comment
Я понятия не имею об этом, но вы можете сделать это, используя режим градиента или портердуфа для этого. - person Anand Savjani; 12.10.2016

Когда я это сделал, мне пришлось ставить и TintMode.

<RatingBar
        android:progressTint="@color/colorAccent"
        android:progressTintMode="src_atop" ---- This is important!
        android:secondaryProgressTint="@color/colorPrimary"
        android:secondaryProgressTintMode="src_atop" ---- This is important!
        android:progressBackgroundTint="@color/black_alpha"/>

только для API версии 21 и выше

person Marina Tello Colado    schedule 24.01.2017

<RatingBar
        android:id="@+id/rating"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:theme="@style/RatingBar"/>

с темой в стилях

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

person Tony Augustine    schedule 26.12.2016