2012-09-12 9 views
14

ho già aggiunto uno stileCome impostare il formato personalizzato delle stelle in RatingBar

<style name="myRatingBar" parent="@android:style/Widget.RatingBar"> 
    <item name="android:minHeight">32dp</item> 
    <item name="android:maxHeight">32dp</item> 
</style> 

Tuttavia, invece di stelle in scala Ricevo stelle ritagliate:

enter image description here

C'è un modo per cambiare la dimensione delle stelle?

risposta

16

Android non scalerà un bar voto icone. Quando si riduce il minHeight e maxHeight Android verrà sempre ritagliare le icone come mostrato nell'immagine. La soluzione alternativa e sembra essere l'unica soluzione consiste nel fornire le proprie icone per le stelle con le dimensioni desiderate e impostare minHeight e maxHeight in base alle dimensioni delle icone.

+2

E se hai bisogno di diverse dimensioni stellari in diverse parti della tua app? Hai bisogno di nuove risorse per questo? Che ne dici di supportare anche diverse dimensioni per i tablet? Ora ho 8 set di stelle da supportare? Le immagini dovrebbero ridimensionarsi alla vista, come fa ImageView, non viceversa. –

+0

Beh, so che è passato molto tempo da quando la domanda è stata posta, ma ho una questione un po 'rilevante, per essere precisi qual è la dimensione delle icone stellari standard _ @ android: style/Widget.RatingBar "_ e stile piccole stelle _"? android: attr/ratingBarStyleSmall "_. Sai dove sono conservate queste icone? – Tafari

+1

Ho creato un metodo in cui puoi impostare le tue immagini per RatingBar e impostare una sovrapposizione di colore personalizzata per le icone delle stelle. Con un po 'di modifica puoi impostare le dimensioni e l'altezza personalizzate senza alcuna anomalia sulle dimensioni effettive del layout possono essere modificate anche le imbottiture per ciascuna valutazione stellare http://stackoverflow.com/a/37460679/1299158 – box

2

Look at this Bar di valutazione personalizzata in stile ridotto.

Penso che sia necessario utilizzare lo stile personalizzato per la barra di valutazione. Here è l'esempio.

+0

piccolo stile è troppo piccolo. Come posso impostare le diverse dimensioni delle stelle di default? –

+0

@MarcinS. Ho aggiunto un altro link –

4

// si può anche provare

<style name="myRatingBar" parent="@android:style/Widget.RatingBar.Indicator"> 

<style name="myRatingBar" parent="@android:style/Widget.RatingBar.Small"> 

Rif:/android-sdk/platforms/android-10/data/res/values/styles.xml

<style name="Widget.RatingBar"> 
     <item name="android:indeterminateOnly">false</item> 
     <item name="android:progressDrawable">@android:drawable/ratingbar_full</item> 
     <item name="android:indeterminateDrawable">@android:drawable/ratingbar_full</item> 
     <item name="android:minHeight">57dip</item> 
     <item name="android:maxHeight">57dip</item> 
     <item name="android:thumb">@null</item> 
    </style> 

    <style name="Widget.RatingBar.Indicator"> 
     <item name="android:indeterminateOnly">false</item> 
     <item name="android:progressDrawable">@android:drawable/ratingbar</item> 
     <item name="android:indeterminateDrawable">@android:drawable/ratingbar</item> 
     <item name="android:minHeight">38dip</item> 
     <item name="android:maxHeight">38dip</item> 
     <item name="android:thumb">@null</item> 
     <item name="android:isIndicator">true</item> 
    </style> 

    <style name="Widget.RatingBar.Small"> 
     <item name="android:indeterminateOnly">false</item> 
     <item name="android:progressDrawable">@android:drawable/ratingbar_small</item> 
     <item name="android:indeterminateDrawable">@android:drawable/ratingbar_small</item> 
     <item name="android:minHeight">14dip</item> 
     <item name="android:maxHeight">14dip</item> 
     <item name="android:thumb">@null</item> 
     <item name="android:isIndicator">true</item> 
    </style> 
+0

Ok.Ogni volta che cambio minHeight e maxHeight al valore minore ricevo le stelle come nella foto allegata. Sembra che le immagini non siano ridimensionate e devo personalizzare la barra di valutazione fornendo le mie icone con le dimensioni desiderate. –

4

Hai risolto il tuo problema. Ma questo può aiutare gli altri.

Ho lo stesso problema.Tutte le soluzioni che ho ricevuto non funzionano per più dimensioni dello schermo. Dopo aver passato ore ho finito con la seguente soluzione.

Basta ottenere l'altezza estraibile che si desidera utilizzare in fase di esecuzione e impostarla su RatingBar. Ecco un codice di esempio.

Drawable starDrawable = getResources().getDrawable(R.drawable.YOUR_IMAGE); 
int height = starDrawable.getMinimumHeight(); 
LayoutParams params = (LayoutParams) ratingBar.getLayoutParams(); 
params.height = height; 
ratingBar.setLayoutParams(params); 
+0

Thx bro, la soluzione migliore;) –

15

Un altro approccio sarebbe scalare il widget di:

android:scaleX="0.5" 
android:scaleY="0.5" 
+0

Hacky ma lavora :) Grazie! – cylon

0

Questo non è esattamente una risposta, ma vorrei mostrare un'alternativa. Utilizzando una libreria denominata Iconify che consente di utilizzare icone vettoriali scalabili su app Android e con un semplice metodo è possibile creare una barra di rating impressionante con icone.

Il metodo

public static String montarEstrellasValoracion(float valoration,int starSize) { 
    String result=""; 
    float cont=1f; 

    for(float i=1f;i<=valoration;i++){ 
     if(valoracion==0){ 
      break; 
     } 
     cont=i; 
     if((cont+0.5f)>=(valoration) && valoracion!=5f){ 
      result+="{fa-star "+starSize+"dp} "; 
      result+="{fa-star-half-o "+starSize+"dp} "; 
      cont++; 
      break; 
     }else if((cont+0.5f)<(valoration) && (cont+1f)>(valoration) && valoration!=5f){ 
      result+="{fa-star "+starSize+"dp} "; 
      result+="{fa-star "+starSize+"dp} "; 
      cont++; 
      break; 
     } 

     if(cont<=5){ 
      result+="{fa-star "+starSize+"dp} "; 
     } 

    } 

    for(float j=cont;j<5f;j++){ 
     result+="{fa-star-o "+starSize+"dp} "; 
    } 

    if(valoration==0){ 
     result+="{fa-star-o "+starSize+"dp}"; 
    } 

    return result; 
} 

E poi sul metodo onCreate:

IconTextView valoracion = (IconTextView)item.findViewById(R.id.id_icon_textview); 

valoracion.setText(montarEstrellasValoracion(valoration,15)); valoracion.setTextColor(Color.parseColor("#000");

Le icone sono da un altro luogo impressionante chiamato Font Awesome

Hop e questo aiuta qualcuno!

0
   <RatingBar 
       android:id="@+id/AVL_rating" 
       style="?android:attr/ratingBarStyleSmall" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_below="@+id/ASD_cardlayout" 
       android:layout_centerHorizontal="true" 
       android:layout_centerVertical="true" 
       android:layout_marginTop="@dimen/_10sdp" 
       android:isIndicator="true" 
       android:numStars="5" 
       android:rating="5.0" 
       android:secondaryProgressTint="@color/clr_red" 
       android:stepSize="1.0" /> 
Problemi correlati