2015-09-27 19 views
17

Voglio cambiare il colore della barra di valutazione sul dorato.
Non voglio personalizzare le stelle, voglio solo cambiare il colore per API 16 o superiore
Ho provato seguenti soluzioni, ma nessuno di loro ha lavorato per meAndroid: Cambia il colore della barra di valutazione sul dorato

1.  

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

2. 

android:progressDrawable="@color/golden" in XML 
+0

significa cambiare il colore delle stelle? –

+0

sì ............................................ – ojas

+4

possibile duplicato di [Android RatingBar modifica i colori delle stelle] (http://stackoverflow.com/questions/2446270/android-ratingbar-change-star-colors) –

risposta

46

Questa opzione è ora inclusa nella libreria AppCompat. La versione AppCompat di RatingBar viene utilizzata automaticamente.

http://developer.android.com/reference/android/support/v7/widget/AppCompatRatingBar.html

Esempio (dalla mia app):

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

con tema:

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

Grazie mille –

+3

Insieme alla risposta sopra, usa style = "@ style/Base.Widget.AppCompat.RatingBar.Small" o @ style/Base.Widget.AppCompat.RatingBar.Indicator nel widget della barra di valutazione per giocare con il colore della stella di valutazione e la dimensione pure. –

+17

Non funziona per Pre-lolipop. – Malder

0

la cosa migliore è per utilizzare nuove immagini per le stelle nel colore desiderato con un elenco di livelli come mostrato in this answer.

Non c'è modo di cambiare semplicemente il colore usando alcune proprietà, come le risorse di immagine di utilizzo della barra di valutazione. quindi creare una lista di livelli con le tue immagini è solo una via d'uscita.

2

provare questo,

si ha bisogno immagini 3 stelle (red_star_full.png, red_star_half.png e red_star_empty.png) e un file xml. Se vuoi la stella dorata, usa l'immagine della stella dorata. questo è per la stella rossa.

puoi mettere ratingbar_color.xml in res/drawable.

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

e nella definizione della barra di valutazione utilizzare seguente.

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

Duplicato di http://stackoverflow.com/questions/2446270/android-ratingbar-change -star-colors/6008722 # 6008722 –

4

Come hai detto che vuoi cambiare il colore della stella senza usare il drawable. Puoi farlo con poche righe di codice come sotto.

RatingBar ratingBar = (RatingBar) findViewById(R.id.ratingBar); 
Drawable drawable = ratingBar.getProgressDrawable(); 
drawable.setColorFilter(Color.parseColor("#0064A8"),PorterDuff.Mode.SRC_ATOP); 
+5

Disegna 5 stelle colorate, non 3,5, ad esempio. – CoolMind

2

Il mio compito è stato il cambiamento di colore di rating bar al colore primario del app per Android > = 14 SDK. Ho risolto questo problema nel codice e nel file xml.

mRatingBar = (RatingBar)view.findViewById(R.id.ratingBar); 
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { 
     try { 
      Drawable progressDrawable = mRatingBar.getProgressDrawable(); 
      if (progressDrawable != null) { 
       DrawableCompat.setTint(progressDrawable, ContextCompat.getColor(getContext(), R.color.colorPrimary)); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

E in file xml

 <RatingBar 
      android:id="@+id/ratingBar" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_horizontal" 
      android:backgroundTint="@color/colorPrimary" 
      android:numStars="5" 
      android:progressTint="@color/colorPrimary" 
      android:rating="0" 
      android:secondaryProgressTint="@android:color/transparent" 
      android:stepSize="1" /> 
0
RatingBar ratingreview; 
ratingreview=(RatingBar)v.findViewById(R.id.ratingreview); 
ratingreview.setRating(Float.parseFloat(objrating)); 
Drawable drawable = ratingreview.getProgressDrawable(); 
drawable.setColorFilter(Color.parseColor("#6A9A28"), PorterDuff.Mode.SRC_ATOP); 
4

Basta aggiungere questa linea di xml (API 21 e superiori)

 android:progressTint="@color/color"