2016-02-22 2 views
2

Для заполнения цвет в паспортной строке для определения рейтинга десятичного работает отлично для API ниже 23 и не работает в API 23.Оценка Бар Цвет заливки андроида

Вот код:

RatingBar ratingBar = (RatingBar) view.findViewById(R.id.ratingbar); 
ratingBar.setNumStars(5); 
ratingBar.setMax(5); 
ratingBar.setStepSize(0.1f); 
ratingBar.setRating(0.5); 
Drawable ratingBarColor = ratingBar.getProgressDrawable(); 
DrawableCompat.setTint(ratingBarColor, ContextCompat.getColor(getActivity(), R.color.red)); 

, который будет заполните цвет для 0,5 (полу) звезды красным цветом. Но для API Android 23 (MarshMallow), что бы вы ни установили рейтинг, он заполняет всю звезду. Могу ли я узнать, что произошло в API 23, которое вызывает эту проблему или сообщит мне о проблеме с этим кодом.

Трубка используется для тестирования (6.0): HTC One M8, Moto X Play, Nexus 6. 5.1.1: Moto X (первое поколение), Nexus 4, Moto G1, G2

Edit: я тестировал удалив setTint в API23, который устанавливает белый цвет с десятичной оценкой. Таким образом, с помощью DrawableCompat может быть задан цвет для десятичной звезды рейтинга.

+0

попытался дать стиль? стиль = "андроид: атр/ratingBarStyle" ?? –

+1

@ Viren Я настраиваю настраиваемую панель оценок прогамально. –

+0

Я тебя не понял. вы создаете индивидуальный стиль ??? Я прошу вас объявить его в xml, где вы ставите рейтинговую марку. –

ответ

3

Вы можете сделать заказ рейтинг бар

-просто сделать файл XML в вашей вытяжке папки и назовите его rating_bar.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/rating_empty" /> 
     <item android:id="@android:id/secondaryProgress" android:drawable="@drawable/rating_empty" /> 
     <item android:id="@android:id/progress" android:drawable="@drawable/rating_filled" /> 
    </layer-list> 

2 сделать файл другим рисуют XML и назовите его rating_empty.xml

<item android:state_pressed="true" 
     android:state_window_focused="true" 
     android:drawable="@drawable/ic_unrated_star" /> 

<item android:state_focused="true" 
     android:state_window_focused="true" 
     android:drawable="@drawable/ic_unrated_star" /> 

<item android:state_selected="true" 
     android:state_window_focused="true" 
     android:drawable="@drawable/ic_unrated_star" /> 

<item android:drawable="@drawable/ic_unrated_star" /> 

3 делает файл вытяжки соседнего XML для заполненной звезды и назовите его rating_filled.xml

<item android:state_pressed="true" 
     android:state_window_focused="true" 
     android:drawable="@drawable/ic_rated_star" /> 

<item android:state_focused="true" 
     android:state_window_focused="true" 
     android:drawable="@drawable/ic_rated_star" /> 

<item android:state_selected="true" 
     android:state_window_focused="true" 
     android:drawable="@drawable/ic_rated_star" /> 

<item android:drawable="@drawable/ic_rated_star" /> 

4 Гото папкой ваших ценностей и открытой style.xml и добавьте стиль

<style name="customRatingBar" parent="@android:style/Widget.RatingBar"> 
     <item name="android:progressDrawable">@drawable/rating_bar</item> 
    </style> 

-просто использовать пользовательский рейтинг бар, который вы только что создали

<RatingBar 
    style="@style/customRatingBar" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="bottom|center" 
    android:numStars="5" /> 

Примечания: ic_rated_star и ic_unrated_star являются укомплектовать заполнены звездами и пустая звезда изображение, которое вы хотите показать в своей баре оценки.

Надеюсь, это сработало для вас ... удачи ...

+1

Как вы можете изменить цвет панели оценки на основе условий ?. Пожалуйста, прочитайте вопрос перед ответом. –

+0

Просто поместите изображение звезд ... – Kushal

4

Для API 23 (MarshMallow), RatingBar страдает от проблемы с изменением цвета всех звезд (независимо от того, что это 1 или 5 звезд), которые выглядят так, как будто это всегда 5 звезд.

ОБНОВЛЕНО ОТВЕТ: Следующий код работает

if (ratingBar.getProgressDrawable() instanceof LayerDrawable) { 
    LayerDrawable stars = (LayerDrawable) ratingBar.getProgressDrawable(); 
    DrawableCompat.setTint(stars.getDrawable(2), color); 
} 
else { 
    // for Android 4.3, ratingBar.getProgressDrawable()=DrawableWrapperHoneycomb 
    DrawableCompat.setTint(ratingBar.getProgressDrawable(), color); 
} 

Следующая не работает Mashmallow

Drawable ratingBarColor = ratingBar.getProgressDrawable(); 
DrawableCompat.setTint(ratingBarColor, ContextCompat.getColor(getActivity(), R.color.red)); 

В файле макета не забудьте использовать android.support.v7 .widget.AppCompatRatingBar, а не RatingBar.

+0

Спасибо за ответ @Desmond. Я это попробую. –

+0

работал отлично, спасибо! –

Смежные вопросы