2012-09-12 86 views
14

ya he añadido un estiloCómo modificar el tamaño personalizado de las estrellas en RatingBar

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

Sin embargo en lugar de estrellas a escala Estoy recibiendo estrellas recortadas:

enter image description here

¿Hay una forma de cambiar el tamaño de las estrellas?

Respuesta

16

Android no se escala a iconos de la barra de clasificación. Cuando disminuya el minHeight y el maxHeight, Android siempre recortará los iconos como se muestra en la imagen. La solución para esto y parece ser la única solución es proporcionar sus propios iconos para las estrellas con las dimensiones deseadas y configurar minHeight y maxHeight al tamaño de los iconos.

+2

¿Y si necesita diferentes tamaños de estrellas en diferentes partes de su aplicación? ¿Necesita nuevos activos para eso? ¿Qué pasa con el apoyo de diferentes tamaños para tabletas? Ahora tengo 8 juegos de estrellas para apoyar? Las imágenes deben escalar a la vista, como lo hace ImageView, y no al revés. –

+0

Bueno, sé que hace mucho tiempo que se formuló la pregunta, pero tengo un asunto un poco relevante, para ser precisos, ¿cuál es el tamaño de los iconos de estrellas estándar _ @ android: style/Widget.RatingBar "_ y pequeñas estrellas style _"? android: attr/ratingBarStyleSmall "_. ¿Sabes dónde se guardan estos iconos? – Tafari

+1

Creé un método donde puedes establecer tus propias imágenes para RatingBar y establecer una superposición de color personalizada para los iconos de estrellas. Con un poco de modificación, puedes establecer su tamaño y altura personalizados sin ninguna anomalía en el tamaño de diseño real, los rellenos para cada clasificación de estrellas también se pueden modificar. http://stackoverflow.com/a/37460679/1299158 – box

2

Look at this Barra de clasificación personalizada en estilo pequeño.

Creo que tiene que usar el estilo personalizado para la barra de clasificación. Here es el Ejemplo.

+0

pequeño estilo es demasiado pequeño. ¿Cómo puedo establecer el tamaño diferente de las estrellas predeterminadas? –

+0

@MarcinS. Agregué otro enlace –

4

// también puede probar

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

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

Ref:/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.Cada vez que cambio minHeight y maxHeight por el valor menor, recibo las estrellas como en la imagen adjunta. Parece que las imágenes no tienen escala y tengo que personalizar la barra de clasificación al proporcionar mis propios iconos con el tamaño deseado. –

4

Ha resuelto su problema. Pero esto puede ayudar a otros.

Tengo el mismo problema. Todas las soluciones que obtuve no funcionan para múltiples tamaños de pantalla. Después de pasar horas, terminé con la siguiente solución.

Simplemente obtenga la altura dibujable que desea usar en tiempo de ejecución y configúrela en la Barra de clasificación. Aquí hay un código de muestra.

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 mejor solución;) –

15

Otro enfoque sería escalando el widget:

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

Hacky pero trabajando :) ¡Gracias! – cylon

0

Esto no es exactamente una respuesta, pero me gustaría mostrar una alternativa. Usando una biblioteca llamada Iconify que le permite usar iconos vectoriales escalables en aplicaciones de Android y con un método simple puede crear impresionantes barras de calificación con iconos.

El método

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; 
} 

Y luego en el método onCreate:

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

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

Los iconos son de otro sitio impresionante llamada Font Awesome

Hop e esto ayuda a alguien!

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