Как я могу установить цвет звездочек на панели рейтинга? Я хочу желтые звезды.
Как я могу установить цвет звездочек на панели рейтинга?
Ответы (10)
Самый простой способ:
android:progressTint="@color/color"
Гладкая и блестящая.
Это сработало для меня:
Drawable drawable = ratingBar.getProgressDrawable();
drawable.setColorFilter(Color.parseColor("#FFFDEC00"), PorterDuff.Mode.SRC_ATOP);
Я обнаружил, что просто установка progressTint не является полным решением. Он изменит цвет звезды, но не при частичном заполнении звезд, если ваш stepSize меньше 1. По моему опыту, вам также необходимо установить вторичный цвет ProgressTint, чтобы не дать звездному оттенку по умолчанию поднять свою уродливую голову. Вот мой код:
android:progressTint="@color/accent"
android:secondaryProgressTint="@android:color/transparent"
Надеюсь, это поможет кому-то в моей ситуации.
android:progressBackgroundTint
для пустой звезды.
- person chubao; 06.06.2016
progressTint
и secondaryProgressTint
используются только в уровне API 21 и выше.
- person ViliusK; 18.07.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" />
и используя свои собственные чертежи?
Вам нужны 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"/>
Панель рейтинга используется автоматически во время выполнения для изменения цвета сенсорной звезды.
Сначала добавьте стиль в файл 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"/>
В упомянутом блоге это немного сложно, я использовал аналогичный, но более простой способ. Вам нужны изображения с тремя звездочками (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"/>
Вот и все.
Попробуй это
RatingBar ratingBar = (RatingBar) findViewById(R.id.ratingBar);
LayerDrawable stars = (LayerDrawable) ratingBar.getProgressDrawable();
stars.getDrawable(2).setColorFilter(Color.YELLOW,PorterDuff.Mode.SRC_ATOP);
Когда я это сделал, мне пришлось ставить и 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 и выше
<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>