2013-08-02 16 views
8

Jak ustawić kolor gwiazdki na pasku oceny? Chcę żółte gwiazdki.Jak ustawić kolor gwiazdki na pasku oceny?

+0

Spróbuj tego: [Android RatingBar zmienić kolory gwiazdy] (http://stackoverflow.com/a/2447209/2558882). – Vikram

+0

Znajdź najprostszy sposób, jeśli używasz aktywności AppCompat http://stackoverflow.com/questions/2446270/android-ratingbar-change-star-colors/36297738#36297738 –

Odpowiedz

4

Czy próbowałeś się motyw xml, takich jak

<?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> 

wzywającą go w XML jako

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

i przy użyciu własnego kanału alfa?

+0

Cześć kwishnu, Próbowałem tego rozwiązania, ale kiedy spróbuj ustawić ocenę podobną do 1.1, 1.2, etc ... wyświetla się jako 1.5. Zrobiłem trzygwiazdkowe obrazy, jedno puste, jedno pełne i jedno pełne. Przypuszczam, że ma to na celu interpolację między nimi, aby uzyskać części ułamkowe. Zastanawiam się, czy ktoś inny miał ten sam problem, czy też robię coś wyraźnie niewłaściwego? –

2

Potrzebujesz 3-gwiazdkowych obrazów (star_filled_show.png, star_half_show.png i star_empty_show.png) i jednego xml, to wszystko.

Umieść te 3 obrazy w res/drawable.

Wpisz następujące 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> 

Opowiedz swoją definicję ratingbar aby skorzystać z tej rozciągliwej

<RatingBar android:progressDrawable="@drawable/ratingbarstars.xml"/> 
0

To trochę skomplikowane, na wspomnianym blogu, mam używany podobny ale prostszy sposób . Potrzebujesz 3-gwiazdkowych obrazów (red_star_full.png, red_star_half.png i red_star_empty.png) i jednego xml, to wszystko.

Umieść te 3 obrazy w rozdzielczości/do rysowania.

Wpisz następujące 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> 

i wreszcie powiedzieć twoja definicja ratingbar aby skorzystać z tej, to znaczy

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

to wszystko.

1

próbować ten jeden

RatingBar ratingBar = (RatingBar) findViewById(R.id.ratingBar); 
LayerDrawable stars = (LayerDrawable) ratingBar.getProgressDrawable(); 
stars.getDrawable(2).setColorFilter(Color.YELLOW,PorterDuff.Mode.SRC_ATOP); 
+0

Co powiesz na to, kiedy gwiazda jest w połowie wypełniona? Chcę, żeby gwiazda była na wpół żółta i na wpół szara - czy coś w tym rodzaju. – iOSAndroidWindowsMobileAppsDev

+0

Nie mam o tym pojęcia, ale można to zrobić za pomocą trybu gradientu lub trybu portowania dla tego –

+0

. Czy mógłbyś opublikować fragment kodu? – iOSAndroidWindowsMobileAppsDev

8

Ten pracował dla mnie:

Drawable drawable = ratingBar.getProgressDrawable(); 
    drawable.setColorFilter(Color.parseColor("#FFFDEC00"), PorterDuff.Mode.SRC_ATOP); 
+0

Podoba mi się ta odpowiedź, nie będziesz potrzebować niestandardowych gwiazdek. Po prostu muszę zmienić kolor jako pytanie, a nie gwiazdy. Jedyną wadą jest jeden kolor, który chyba trzeba zmodyfikować także inne rysunki. –

9

Najprostszy sposób:

android:progressTint="@color/color" 

gładka i błyszcząca.

+0

Proste i łatwe! +1 –

+4

działa tylko dla wersji api 21 i wyżej – suku

+0

@suku yup, ale pytanie nie zawierało żadnych ograniczeń dotyczących minSDK. – MiguelCatalan

6

Stwierdziłem, że samo ustawienie progressTint nie jest kompletnym rozwiązaniem. Zmieni kolor gwiazdy, ale nie w przypadku częściowego wypełnienia gwiazd, jeśli twój rozmiar kroku jest mniejszy niż 1. Z mojego doświadczenia wynika również, że musisz ustawić parametr secondaryProgressTint, aby powstrzymać domyślny odcień gwiazdy przed wychowaniem jego paskudnej głowy. Oto mój kod:

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

Mam nadzieję, że to pomoże komuś w mojej sytuacji.

+0

Musisz również ustawić "android: progressBackgroundTint" dla pustej gwiazdy. –

+3

Atrybuty 'progressTint' i' secondaryProgressTint' są używane tylko na poziomie API 21 i wyższym. – ViliusK

+0

@ ViliusK jaki będzie najlepszy sposób, aby to działało dla wszystkich wersji api Androida – Pallavi

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

z motywem w stylu

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

1

Kiedy to zrobiłem, a ja musiałem umieścić TintMode też.

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

tylko dla api wersji 21 i powyżej

0

Pasek ocena jest stosowany automatycznie w czasie wykonywania do zmiany koloru na dotykowym gwiazdy.

najpierw dodać styl w aplikacji \ src \ main \ Res \ Wartości \ plik styles.xml:

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

Następnie pasek ocena dodać temat tak:

<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"/> 
Powiązane problemy