Miałem nadzieję, że to pytanie dotyczy wielokolorowego paska oceny, jak pokazano na stronach internetowych, nie mogłem znaleźć takiego dla siebie. Sam stworzyłem prostą implementację github.com/codebreaker/coloredratingbar-android . Mam nadzieję, że to komuś pomoże.
jaga
Odpowiedzi:
26
Krok # 1: Stwórz własny styl, klonując jeden z istniejących stylów (z $ANDROID_HOME/platforms/$SDK/data/res/values/styles.xml), umieszczając go w swoim własnym projekciestyles.xml i odwołując się do niego podczas dodawania widżetu do układu.
Krok # 2: Utwórz własne LayerDrawablezasoby XML RatingBardla paska, wskazując odpowiednie obrazy do wykorzystania w pasku. Oryginalne style wskażą Ci istniejące zasoby, z którymi możesz porównać. Następnie dostosuj swój styl, aby używać własnych LayerDrawablezasobów, a nie wbudowanych.
Zgodnie z krokiem 2, to nie działa w przypadku urządzeń Samsung 3 lub innych, nie jest to wymagane, aby było to LayerDrawable. Zobacz tutaj, aby uzyskać informacje: stackoverflow.com/questions/30266334/…
Kenny
6
Użyj androida: progressTint = "@ color / yellow". Zobacz odpowiedź @superpuccio.
Vincent
2
progressTint obsługiwana tylko powyżej poziomu 21 api
Na wspomnianym blogu jest to trochę skomplikowane, zastosowałem podobny, ale prostszy sposób. Potrzebujesz 3 obrazów gwiazdek (red_star_full.png, red_star_half.png i red_star_empty.png) i jednego pliku XML, to wszystko.
Cześć Alex, wypróbowałem to rozwiązanie, ale kiedy próbuję ustawić ocenę na coś takiego jak 1,1, 1,2 itd ... wyświetla się jako 1,5. Zrobiłem 3-gwiazdkowe zdjęcia, jedno puste, w połowie pełne i jedno pełne. Przypuszczam, że ma interpolować między nimi, aby uzyskać ułamkowe składniki, po prostu zastanawiam się, czy ktoś inny miał ten sam problem, czy robię coś zauważalnie źle?
Graham Baitson,
Czy możesz mi powiedzieć o obrazach, których powinniśmy użyć pogoda, to kolorowe obrazy i rozmiar obrazów. Nie
jestem w
1
Wszyscy widzą odpowiedź na tę aktualizację 2015 poniżej! To dużo łatwiejsze i prostsze!
katie
Ta odpowiedź nadal zapewnia większą elastyczność w odniesieniu do różnych stanów gwiazd.
Tom Brinkkemper
Dlaczego pod gwiazdami pojawiają się pionowe linie? Próbowałem zdefiniować niestandardowy styl, określając wysokość, ale na moim AVD nadal widać pionowe linie pod gwiazdami.
Co dokładnie PorterDuff.Mode.SRC_ATOPoznacza lub co robi?
Zapnologica
5
Nie działa na API 5.0 i nowszych. Potrzeby:Drawable stars = rb.getProgressDrawable(); stars.setTint( Color.YELLOW );
zyamys
@zyamys To naprawdę jest do bani = (Metoda dla „wyższych wersji” i inna metoda dla starszych wersji jest konieczna?
Daniela Morais
1
Działa tylko z dokładnością 0,5. W przeciwnym razie (precyzja <0,5) nakładka robi się dziwna i wydaje się, że niebieski kolor jest nadal z dokładnością 0,5, podczas gdy żółty jest dokładny
Teo Inke
1
Ostrzeżenie: awarie na urządzeniach sprzed lolipopu. Idź z zaakceptowaną odpowiedzią.
blockwala
70
Najłatwiejszy sposób, który u mnie zadziałał ... jeśli rozszerzasz działanie AppCompat
W pliku build.gradle dodaj najnowszą bibliotekę appcompat.
dependencies {
compile 'com.android.support:appcompat-v7:X.X.X'// where X.X.X version}
Rozszerz swoją aktywność na android.support.v7.app.AppCompatActivity
Dzięki @Vishal Kumar. Wypróbowałem to na Kitkat 4.4.4 (Samsung S3 neo) i Marshmallow 6.0.1 (Samsung Galaxy On Nxt), działało. Ale bez sukcesu na Lollipop 5.1 (Micromax). W przypadku Lollipopa użyłem atrybutu „android: progressTint” w RatingBar i tak, to działa.
Prashant,
To najlepsze rozwiązanie.
Arhat Baid
To powinna być wybrana poprawna odpowiedź.
Hampel Előd
1
To najlepsze rozwiązanie. Jeśli chcesz zmienić rozmiar gwiazdy, możesz użyć style="?android:ratingBarStyleSmall"razem.
Czy są sposoby na ustawienie koloru gwiazd na podstawie danych pobranych z bazy danych? Powiedzmy, że dostałem 5 gwiazdek, a dane zwrócone z bazy danych to 4. Więc zamiast zmieniać wszystkie 5, zmieniam tylko pierwsze 4
1
Funkcja getColor jest obecnie przestarzała, czy jest jakieś rozwiązanie alternatywne?
Manohar Reddy
2
Odpowiedzi można znaleźć tutaj stackoverflow.com/a/32202256/2513291 Na przykład to podejście ContextCompat.getColor (kontekst, R.color.nazwa_koloru)
Yuriy Vinogradov
działa dobrze, ale zauważ, że z jakiegoś powodu kolejność jest ważna (2, potem 1, potem 0). Próbowałem odwrotnie i przy pierwszej zmianie koloru doprowadziło to do pewnych usterek interfejsu użytkownika.
Simon Ninon,
25
Rozwiązania opublikowane przez Alexa i CommonsWares są poprawne. Jedną rzeczą, o której Android nigdy nie mówi, są odpowiednie rozmiary pikseli dla różnych gęstości. Oto wymagane wymiary dla każdej gęstości w oparciu o światło halo.
Tak więc zmagałem się z tym problemem przez dwie godziny i wymyśliłem działające rozwiązanie dla wszystkich wersji API, w których wyświetlane są również oceny w połowie gwiazdek.
jedyny sposób, który działa dla mnie na API19, ale nie poddałem się, aby szukać sposobu na zrobienie tego z xml tylko T_T
Beeing Jk
@BeeingJk Jeśli utworzysz niestandardowy widok, który rozszerza RatingBar, możesz utworzyć własne atrybuty XML, aby określić kolor tinty. Masz wtedy pojedynczy punkt kontrolny do ustawiania tinty i możesz określić tintę w xml. Mam nadzieję, że to pomoże! W razie potrzeby mogę wyjaśnić więcej
Forrest Bice
Mode.SRC_INczy Mode.MULTIPLY?
Dr Jacky
12
Teraz możesz użyć DrawableCompat od AppCompat v22.1.0 i nowszych, aby dynamicznie zabarwić wszelkiego rodzaju elementy do rysowania, przydatne, gdy obsługujesz wiele motywów za pomocą jednego zestawu elementów do rysowania. Na przykład:
LayerDrawable layerDrawable =(LayerDrawable) ratingBar.getProgressDrawable();DrawableCompat.setTint(DrawableCompat.wrap(layerDrawable.getDrawable(0)),Color.RED);// Empty starDrawableCompat.setTint(DrawableCompat.wrap(layerDrawable.getDrawable(1)),Color.GREEN);// Partial starDrawableCompat.setTint(DrawableCompat.wrap(layerDrawable.getDrawable(2)),Color.BLUE);// Full star
Aby uzyskać rzeczywisty rozmiar i kształt, musisz zdefiniować nowy styl i elementy rysunkowe listy warstw dla odpowiedniego rozmiaru, tak jak inni już odpowiedzieli powyżej.
Po kilku badaniach wymyśliłem tę metodę ustawiania odcienia tła, odcienia przerwy (np .: pół gwiazdki) i koloru odcienia gwiazdy.
LayerDrawable layers =(LayerDrawable) ratingBar.getProgressDrawable();DrawableCompat.setTint(layers.getDrawable(0),0x33000000);// The background tintDrawableCompat.setTint(layers.getDrawable(1),0x00000000);// The gap tint (Transparent in this case so the gap doesnt seem darker than the background)DrawableCompat.setTint(layers.getDrawable(2),0xffFED80A);// The star tint
Korzystając z powyższych odpowiedzi, stworzyłem szybką statyczną metodę, którą można łatwo ponownie wykorzystać. Ma na celu jedynie zabarwienie koloru postępu dla aktywowanych gwiazd. Gwiazdy, które nie są aktywowane, pozostają szare.
Po prostu przekaż swój pasek oceny i kolor, używając getResources().getColor(R.color.my_rating_color)
Jak widać, używam DrawableCompat, więc jest kompatybilny wstecz.
EDYCJA: Ta metoda nie działa na API21 (zobacz dlaczego). Kończy się z NullPointerException podczas wywoływania setProgressBar. Skończyło się na wyłączeniu całej metody na API> = 21.
java.lang.ClassCastException: android.support.v4.graphics.drawable.DrawableWrapperHoneycomb nie może być rzutowany na android.graphics.drawable.LayerDrawable on pre-Lollipop
Ishaan Garg
1
@IshaanGarg masz rację. Napotkałem ten sam problem i zaktualizowałem moją metodę. Zaktualizowałem kod, aby obsłużyć sprawę. Nie sądzę, że to kwestia wersji Androida. Jeśli używasz mniejszej wersji paska oceny (ze style = "? Android: attr / ratingBarStyleSmall"), wówczas zwracany element do rysowania jest nadal LayoutDrawable.
JDenais
Tak, właśnie to, co zaimplementowałem, po prostu pamiętaj, aby użyć AppCompatRatingBar. Chociaż nie jestem w stanie uzyskać pół gwiazdki podczas wstępnego ustawiania oceny z XML / java. Podobnie jak setRating (3.5) pokazuje 4 pełne gwiazdki
Ishaan Garg
1
Pasek oceny jest używany automatycznie w czasie wykonywania do zmiany koloru gwiazdy dotykowej.
Najpierw dodaj styl w pliku app \ src \ main \ res \ values \ styles.xml:
Nie wiem czemu, ale wygląda na to, że metoda wpływa tylko na obramowanie gwiazd (kolor wypełnienia pozostaje kolorem domyślnym)
superpuccio.
Ok, przegapiłeś niektóre parametry xml. Sprawdź moją odpowiedź poniżej.
superpuccio
1
Masz rację. Nie wiem, dlaczego myślałem, że miał problemy ze zmianą koloru obramowania gwiazdy (może dlatego, że miałem problem). Twoja odpowiedź jest bardziej kompletna.
Pau Arlandis Martinez
0
Szukałem niezawodnej metody, aby to zrobić, aż do co najmniej API 9. Rozwiązanie „Casting do LayerDrawble” wydawało mi się ryzykownym rozwiązaniem, a kiedy przetestowałem je na telefonie z Androidem w wersji 2.3, zostało ono pomyślnie przesłane, ale wywołanie DrawableCompat.setTint (...) nie przyniosło żadnego efektu.
Konieczność ładowania majątku trwałego również nie wydawała mi się dobrym rozwiązaniem.
Zdecydowałem się napisać własne rozwiązanie, które jest rozszerzeniem klasy AppCompatRatingBar, używając niestandardowego Drawable, który programowo rysuje gwiazdy. Działa idealnie na moje potrzeby, opublikuję to na wypadek, gdyby komuś pomogło:
Link jest łatwiejszy, ponieważ możesz pobrać pełny plik bezpośrednio, ale tutaj jest pełny kod na wszelki wypadek:
import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.ColorFilter;import android.graphics.Paint;import android.graphics.Paint.Style;import android.graphics.Path;import android.graphics.PointF;import android.graphics.drawable.Drawable;import android.support.v7.widget.AppCompatRatingBar;import android.util.AttributeSet;/**
* @author androidseb
* <p/>
* Extends AppCompatRatingBar with the ability to tint the drawn stars when selected, pressed and un-selected.
* Limitation: Only draws full stars.
*/publicclassTintableRatingBarextendsAppCompatRatingBar{privateTintableRatingBarProgressDrawable progressDrawable;publicTintableRatingBar(finalContext context){super(context);
init();}publicTintableRatingBar(finalContext context,finalAttributeSet attrs){super(context, attrs);
init();}publicTintableRatingBar(finalContext context,finalAttributeSet attrs,finalint defStyleAttr){super(context, attrs, defStyleAttr);
init();}privatevoid init(){
progressDrawable =newTintableRatingBarProgressDrawable();
setProgressDrawable(progressDrawable);}publicvoid setCustomTintColors(finalint _uncheckedColor,finalint _pressedColor,finalint _checkedColor){
progressDrawable.setRatingMaxLevelValue(getMax()*1000);
progressDrawable.setUnCheckedColor(_uncheckedColor);
progressDrawable.setPressedColor(_pressedColor);
progressDrawable.setCheckedColor(_checkedColor);
invalidate();}publicclassTintableRatingBarProgressDrawableextendsDrawable{privatestaticfinalint STAR_COUNT =5;privatestaticfinalint STAR_BRANCHES_COUNT =5;/** Sets the max level value: if the level is at the max, then all stars are selected. */privateint ratingMaxLevelValue =10000;/** Color to be painted for unselected stars */privateint uncheckedColor =Color.GRAY;/** Color to be painted for unselected stars when the ratingbar is pressed */privateint pressedColor =Color.CYAN;/** Color to be painted for selected stars */privateint checkedColor =Color.BLUE;@Overridepublicvoid setAlpha(finalint _i){}@Overridepublicvoid setColorFilter(finalColorFilter _colorFilter){}@Overridepublicboolean isStateful(){returntrue;}@Overridepublicboolean setState(finalint[] stateSet){finalboolean res =super.setState(stateSet);
invalidateSelf();return res;}@Overridepublicint getOpacity(){return255;}publicvoid setRatingMaxLevelValue(finalint _ratingMaxLevelValue){
ratingMaxLevelValue = _ratingMaxLevelValue;}publicvoid setUnCheckedColor(finalint _uncheckedColor){
uncheckedColor = _uncheckedColor;}publicvoid setPressedColor(finalint _pressedColor){
pressedColor = _pressedColor;}publicvoid setCheckedColor(finalint _checkedColor){
checkedColor = _checkedColor;}@Overridepublicvoid draw(finalCanvas _canvas){boolean pressed =false;for(int i : getState()){if(i == android.R.attr.state_pressed){
pressed =true;}}finalint level =(int)Math.ceil(getLevel()/(double) ratingMaxLevelValue * STAR_COUNT);finalint starRadius =Math.min(getBounds().bottom /2, getBounds().right / STAR_COUNT /2);for(int i =0; i < STAR_COUNT; i++){finalint usedColor;if(level >= i +1){
usedColor = checkedColor;}elseif(pressed){
usedColor = pressedColor;}else{
usedColor = uncheckedColor;}
drawStar(_canvas, usedColor,(i *2+1)* starRadius, getBounds().bottom /2, starRadius,
STAR_BRANCHES_COUNT);}}privatevoid drawStar(finalCanvas _canvas,finalint _color,finalfloat _centerX,finalfloat _centerY,finalfloat _radius,finalint _branchesCount){finaldouble rotationAngle =Math.PI *2/ _branchesCount;finaldouble rotationAngleComplement =Math.PI /2- rotationAngle;//Calculating how much space is left between the bottom of the star and the bottom of the circle//In order to be able to center the star visually relatively to the square when drawnfinalfloat bottomOffset =(float)(_radius - _radius *Math.sin(rotationAngle /2)/Math.tan(
rotationAngle /2));finalfloat actualCenterY = _centerY +(bottomOffset /2);finalPaint paint =newPaint();
paint.setColor(_color);
paint.setStyle(Style.FILL);finalPath path =newPath();finalfloat relativeY =(float)(_radius - _radius *(1-Math.sin(rotationAngleComplement)));finalfloat relativeX =(float)(Math.tan(rotationAngle /2)* relativeY);finalPointF a =newPointF(-relativeX,-relativeY);finalPointF b =newPointF(0,-_radius);finalPointF c =newPointF(relativeX,-relativeY);
path.moveTo(_centerX + a.x, actualCenterY + a.y);
_canvas.save();for(int i =0; i < _branchesCount; i++){
path.lineTo(_centerX + b.x, actualCenterY + b.y);
path.lineTo(_centerX + c.x, actualCenterY + c.y);
rotationToCenter(b, rotationAngle);
rotationToCenter(c, rotationAngle);}
_canvas.drawPath(path, paint);
_canvas.restore();}privatevoid rotationToCenter(finalPointF _point,finaldouble _angleRadian){finalfloat x =(float)(_point.x *Math.cos(_angleRadian)- _point.y *Math.sin(_angleRadian));finalfloat y =(float)(_point.x *Math.sin(_angleRadian)+ _point.y *Math.cos(_angleRadian));
_point.x = x;
_point.y = y;}}}
Jak sugeruje poprzednia odpowiedź, zmiana koloru paska oceny nie jest łatwa. Gwiazdy nie są rysowane programowo, są to obrazy o stałym rozmiarze i określonych gradientach kolorów. Aby zmienić kolor, musisz utworzyć własne obrazy gwiazd z różnymi kolorami, a następnie przystąp do tworzenia własnego zasobu XML, który można rysować, i przekaż go do klasy RatingsBar za pomocą setProgressDrawable (Drawable d) lub atrybutu XML android: progressDrawable.
Odpowiedzi:
Krok # 1: Stwórz własny styl, klonując jeden z istniejących stylów (z
$ANDROID_HOME/platforms/$SDK/data/res/values/styles.xml
), umieszczając go w swoim własnym projekciestyles.xml
i odwołując się do niego podczas dodawania widżetu do układu.Krok # 2: Utwórz własne
LayerDrawable
zasoby XMLRatingBar
dla paska, wskazując odpowiednie obrazy do wykorzystania w pasku. Oryginalne style wskażą Ci istniejące zasoby, z którymi możesz porównać. Następnie dostosuj swój styl, aby używać własnychLayerDrawable
zasobów, a nie wbudowanych.źródło
Na wspomnianym blogu jest to trochę skomplikowane, zastosowałem podobny, ale prostszy sposób. Potrzebujesz 3 obrazów gwiazdek (red_star_full.png, red_star_half.png i red_star_empty.png) i jednego pliku XML, to wszystko.
Umieść te 3 obrazy w res / drawable.
Umieść tam następującą ocenębar_red.xml:
i na koniec powiedz swojej definicji Ratingbar, aby używała tego, tj
Otóż to.
źródło
Spróbuj tego, jeśli chcesz tylko zmienić kolor:
źródło
PorterDuff.Mode.SRC_ATOP
oznacza lub co robi?Drawable stars = rb.getProgressDrawable(); stars.setTint( Color.YELLOW );
Najłatwiejszy sposób, który u mnie zadziałał ... jeśli rozszerzasz działanie AppCompat
W pliku build.gradle dodaj najnowszą bibliotekę appcompat.
Rozszerz swoją aktywność na android.support.v7.app.AppCompatActivity
Zadeklaruj własny styl w pliku styles.xml.
Zastosuj ten styl do swojego RatingBar za pomocą atrybutu android: theme.
źródło
style="?android:ratingBarStyleSmall"
razem.<style name="RatingBarSmallTheme" parent="Theme.AppCompat"> <item name="colorControlNormal">@color/colorOrangeNormal</item> <item name="colorControlActivated">@color/colorOrangeActivated</item> <item name="ratingBarStyle">@style/Widget.AppCompat.RatingBar.Small</item> </style>
i twoja ocenaBarandroid:theme="@style/RatingBarSmallTheme"
Aktualizacja 2015
Teraz możesz użyć DrawableCompat do zabarwienia wszelkiego rodzaju rysunków. Na przykład:
Jest to zgodne wstecz do API 4
źródło
if(Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP_MR1) {}
Począwszy od API 21 , bardzo łatwo jest zmienić kolor gwiazd za pomocą tych trzech linii kodu:
Robiąc to w ten sposób, zmienisz:
źródło
Jeśli chcesz zmienić kolor wszystkich gwiazd, oświadczam, że ja używam:
źródło
Rozwiązania opublikowane przez Alexa i CommonsWares są poprawne. Jedną rzeczą, o której Android nigdy nie mówi, są odpowiednie rozmiary pikseli dla różnych gęstości. Oto wymagane wymiary dla każdej gęstości w oparciu o światło halo.
Mała gwiazda
Średnia gwiazda
Duża gwiazda
źródło
Tak więc zmagałem się z tym problemem przez dwie godziny i wymyśliłem działające rozwiązanie dla wszystkich wersji API, w których wyświetlane są również oceny w połowie gwiazdek.
Wywołujesz metodę z następującą kolejnością drawables:
UWAGA: Musisz także określić atrybuty „max” i „numStars” w XML, w przeciwnym razie pół gwiazdki nie będą wyświetlane.
źródło
Mode.SRC_IN
czyMode.MULTIPLY
?Teraz możesz użyć DrawableCompat od AppCompat v22.1.0 i nowszych, aby dynamicznie zabarwić wszelkiego rodzaju elementy do rysowania, przydatne, gdy obsługujesz wiele motywów za pomocą jednego zestawu elementów do rysowania. Na przykład:
Jest to zgodne wstecz do API 4. Zobacz także wpis na blogu Chrisa Banesa na temat Support Libraries v22.1.0
Aby uzyskać rzeczywisty rozmiar i kształt, musisz zdefiniować nowy styl i elementy rysunkowe listy warstw dla odpowiedniego rozmiaru, tak jak inni już odpowiedzieli powyżej.
źródło
Posługiwać się
android:theme
atrybutu:style.xml
layout.xml
źródło
Aby zmienić kolor paska oceny z xml: -
źródło
Aby zmienić kolor wystarczy ustawić parametr android: progressTint
W przypadku rozmiaru właściwość style.
źródło
Najprostszy sposób:
źródło
Budynek @ lgvalle's odpowiedź.
Pozwoli to zachować kolory kroków ułamkowych.
źródło
użyj własnego koloru
źródło
Bez dodawania nowego stylu możesz użyć odcienia w pliku
RatingBar
źródło
Działa na Androida poniżej i powyżej wersji 21
Po kilku badaniach wymyśliłem tę metodę ustawiania odcienia tła, odcienia przerwy (np .: pół gwiazdki) i koloru odcienia gwiazdy.
źródło
Proste rozwiązanie, użyj AppCompatRatingBar i jego metody setProgressTintList , aby to osiągnąć, zobacz tę odpowiedź w celach informacyjnych.
źródło
Rozwiązuję ten problem w następujący sposób:
źródło
dla mnie to działa ...
źródło
Znalazłem proste rozwiązanie na zmianę koloru gwiazdy zgodnie z Twoim motywem.
Idź do tej strony: http://android-holo-colors.com/
Wybierz kolor motywu i przygotuj obrazy gwiazd.
źródło
Korzystając z powyższych odpowiedzi, stworzyłem szybką statyczną metodę, którą można łatwo ponownie wykorzystać. Ma na celu jedynie zabarwienie koloru postępu dla aktywowanych gwiazd. Gwiazdy, które nie są aktywowane, pozostają szare.
Po prostu przekaż swój pasek oceny i kolor, używając
getResources().getColor(R.color.my_rating_color)
Jak widać, używam DrawableCompat, więc jest kompatybilny wstecz.
EDYCJA: Ta metoda nie działa na API21 (zobacz dlaczego). Kończy się z NullPointerException podczas wywoływania setProgressBar. Skończyło się na wyłączeniu całej metody na API> = 21.
Dla API> = 21 używam rozwiązania SupperPuccio.
źródło
Pasek oceny jest używany automatycznie w czasie wykonywania do zmiany koloru gwiazdy dotykowej.
Najpierw dodaj styl w pliku app \ src \ main \ res \ values \ styles.xml:
Następnie do paska oceny dodaj motyw w następujący sposób:
źródło
1) zadeklaruj ten plik xml
2) w style.xml
3)
6) ocena aktywna - weź dowolny obraz w ciemnym kolorze, ponieważ będzie on używany jako przezroczystość koloru dla innej oceny
rating_inactive - zrób dowolne zdjęcie tego samego rozmiaru z powyższego obrazu na jasnym tle. Będzie używane, gdy nie zostanie wybrana ocena
źródło
Bardzo prostym sposobem zmiany koloru obramowania gwiazd jest użycie parametru xml:
w widoku RatingBar. Wartość powinna być kodem szesnastkowym koloru.
źródło
Szukałem niezawodnej metody, aby to zrobić, aż do co najmniej API 9. Rozwiązanie „Casting do LayerDrawble” wydawało mi się ryzykownym rozwiązaniem, a kiedy przetestowałem je na telefonie z Androidem w wersji 2.3, zostało ono pomyślnie przesłane, ale wywołanie DrawableCompat.setTint (...) nie przyniosło żadnego efektu.
Konieczność ładowania majątku trwałego również nie wydawała mi się dobrym rozwiązaniem.
Zdecydowałem się napisać własne rozwiązanie, które jest rozszerzeniem klasy AppCompatRatingBar, używając niestandardowego Drawable, który programowo rysuje gwiazdy. Działa idealnie na moje potrzeby, opublikuję to na wypadek, gdyby komuś pomogło:
https://gist.github.com/androidseb/2b8044c90a07c7a52b4bbff3453c8460
Link jest łatwiejszy, ponieważ możesz pobrać pełny plik bezpośrednio, ale tutaj jest pełny kod na wszelki wypadek:
źródło
Trochę późna odpowiedź, ale mam nadzieję, że pomoże to niektórym ludziom.
A oto jak wygląda WhiteRatingStar
Dzięki temu gwiazdy będą na przykład zabarwione na biało.
źródło
Użyj tego łącza
Android RatingBar zmienia kolory gwiazdek
ustaw swój styl wewnątrz wartość / styl (v-21);
źródło
Jak sugeruje poprzednia odpowiedź, zmiana koloru paska oceny nie jest łatwa. Gwiazdy nie są rysowane programowo, są to obrazy o stałym rozmiarze i określonych gradientach kolorów. Aby zmienić kolor, musisz utworzyć własne obrazy gwiazd z różnymi kolorami, a następnie przystąp do tworzenia własnego zasobu XML, który można rysować, i przekaż go do klasy RatingsBar za pomocą setProgressDrawable (Drawable d) lub atrybutu XML android: progressDrawable.
źródło