2012-09-12 11 views
14

Je l'ai déjà ajouté un styleComment définir la taille personnalisée des étoiles dans RatingBar

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

Cependant, au lieu d'étoiles mis à l'échelle que je reçois recadrées étoiles:

enter image description here

est-il un moyen de changer la taille des étoiles?

Répondre

16

Android ne sera pas une échelle icônes de la barre d'évaluation. Lorsque vous réduisez la minHeight et maxHeight Android sera toujours recadrer les icônes comme indiqué sur l'image. La solution pour elle et semble être la seule solution est de fournir vos propres icônes pour les étoiles avec les dimensions souhaitées et définir la taille du minHeight et maxHeight des icônes.

+2

Et si vous avez besoin de différentes tailles d'étoiles dans différentes parties de votre application? Vous avez besoin de nouveaux atouts pour cela? Qu'en est-il aussi de supporter différentes tailles pour les tablettes? Maintenant, j'ai 8 séries d'étoiles à soutenir? Les images doivent évoluer vers la vue, comme le fait ImageView, et non l'inverse. –

+0

Eh bien, je sais que c'est long temps depuis la question a été posée, mais j'ai un peu de matière pertinente, pour être précis quelle est la taille des icônes étoiles standard _ @ android: style/Widget.RatingBar "_ et small stars style _"? Android:. attr/ratingBarStyleSmall "_ savez-vous où ces icônes sont tenues – Tafari

+1

j'ai créé une méthode où vous pouvez définir vos propres images pour RatingBar et définir une superposition de couleurs personnalisées pour les icônes étoiles Avec un peu de modification, vous pouvez définir?. votre taille personnalisée et la taille sans aucune anomalie sur la taille de la mise en page réelle, les paddings pour chaque classement par étoiles peuvent également être modifiés http://stackoverflow.com/a/37460679/1299158 – box

2

Look at this Barre d'évaluation personnalisée dans un petit style.

Je pense que vous devez utiliser le style personnalisé pour la barre de classement. Here est l'exemple.

+0

petit style est trop petit. Comment puis-je définir la taille différente des étoiles par défaut? –

+0

@MarcinS. J'ai ajouté un autre lien –

4

// vous pouvez aussi essayer

<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.Chaque fois que je change minHeight et maxHeight à la moindre valeur, je reçois les étoiles comme dans la photo ci-jointe. Il semble que les images ne sont pas mises à l'échelle et je dois personnaliser la barre d'évaluation en fournissant mes propres icônes avec la taille désirée. –

4

Vous avez résolu votre problème. Mais cela peut aider les autres.

J'ai le même problème. Toutes les solutions que j'ai obtenues ne fonctionnent pas pour plusieurs tailles d'écran. Après avoir passé des heures j'ai fini avec la solution suivante. Obtenez simplement la hauteur pouvant être tirée que vous voulez utiliser lors de l'exécution et réglez-la sur RatingBar. Voici un exemple de code.

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 meilleure solution;) –

15

Une autre approche serait mise à l'échelle du widget:

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

Hacky mais travaillant :) Merci! – cylon

0

Ce n'est pas exactement une réponse, mais je voudrais montrer une alternative. En utilisant une bibliothèque appelée Iconify qui vous permettent d'utiliser des icônes vectoriels adaptables sur les applications Android et avec une méthode simple, vous pouvez créer génial ratingbar avec des icônes.

La méthode

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

Et puis la méthode onCreate:

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

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

Les icônes sont d'un autre site impressionnant appelé Font Awesome

Hop e cela aide tout le monde!

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