web-dev-qa-db-fra.com

Comment faire que RatingBar affiche cinq étoiles

Je suis l'exemple standard de la façon d'ajouter une RatingBar. Pour contrôler le nombre d'étoiles, j'ai essayé d'utiliser Android:numStars="5". Le problème est que le nombre d'étoiles ne semble rien faire du tout. En mode portrait, je reçois 6 étoiles et lorsque je retourne le téléphone, je reçois environ 10 étoiles. J'ai essayé de définir le nombre d'étoiles dans mon activité (myBar.setNumStars(5)) qui charge le code XML, mais cette option n'a pas abouti. 

Ma question est donc la suivante: comment définir ma mise en page pour qu’elle ne montre que cinq étoiles? Définir numStars ne semble pas fonctionner.

Merci d'avance, Roland

83
Roland
<RatingBar
            Android:id="@+id/rating"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            style="?android:attr/ratingBarStyleSmall"
            Android:numStars="5"
            Android:stepSize="0.1"
            Android:isIndicator="true" />

dans du code 

mRatingBar.setRating(int)
148
Alex Volovoy

La documentation RatingBar.setNumStar dit:

Définit le nombre d'étoiles à afficher. Pour pouvoir les afficher correctement, il est recommandé d’envelopper la largeur de la présentation de ce widget contenu.

Donc, régler la largeur de la mise en page sur wrap_content devrait résoudre ce problème.

53
Lisandro

Cela a fonctionné pour moi: RatingBar devrait être à l'intérieur de LinearLayout, à l'exception du paramètre largeur de la mise en page configuré pour envelopper le contenu pour RatingBar

25
Supun

En outre, si vous définissez un layout_weight, cela remplace l'attribut numStars.

10
jsimon
<RatingBar
                    Android:id="@+id/ratingBar"
                    style="@style/custom_rating_bar"
                    Android:layout_width="wrap_content"
                    Android:layout_height="35dp"
                    Android:clickable="true"
                    Android:numStars="5" 
                    />

Configurez le nombre d'étoiles dans le fichier XML ... Inutile de le fournir en styles ou en activité/fragment .... IMPORTANT: assurez-vous de mettre WIDTH en tant que contenu et les poids enveloppants ne sont pas activés

5
Ajith Memana

Je suis également confronté au problème que dépasser les étoiles que spécifié pas d'étoiles. Pour cela, nous ne voulons pas nous inquiéter de tout type de mise en page, soit relative ou linéaire. Utilisez simplement la largeur comme suit:

ratingBar.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));


S'il vous plaît évitez utilisez match_parent et fill_parent pour ratingbar .
J'espère que les choses seraient utiles.

5
Deva

Vous devriez simplement utiliser numStars="5" dans votre code XML et définir Android:layout_width="wrap_content".
Ensuite, vous pouvez jouer avec les styles et d’autres choses, mais c’est le "wrap_content" dans layout_width.

4
Adrián Alvarez

Si vous utilisez 

Android:layout_width="match_parent"

Utilisez wrap_content et ne montrera que les numStars définis :)

Android:layout_width="wrap_content"

4
MQoder

Même si je faisais face au problème @Roland, j’avais inclus un attribut supplémentaire appelé 

Android:layout_alignParentRight="true" 

dans ma déclaration RatingBar en XML. Cet attribut empêche de définir les étoiles requises et de définir la variable NumStars 

Restez au courant des problèmes que vous rencontrez!

3
ReachmeDroid

Pour moi, j'ai eu un problème jusqu'à ce que j'ai enlevé le rembourrage. Il semble qu'un bogue sur certains périphériques n'altère pas la taille de la vue pour s'adapter au remplissage, mais compresse plutôt le contenu.

Supprimez padding, utilisez layout_margin à la place.

2
John Leehey

Pour afficher un classement simple en chiffres ronds, utilisez ce code.

public static String getIntToStar(int starCount) {
        String fillStar = "\u2605";
        String blankStar = "\u2606";
        String star = "";

        for (int i = 0; i < starCount; i++) {
            star = star.concat(" " + fillStar);
        }
        for (int j = (5 - starCount); j > 0; j--) {
            star = star.concat(" " + blankStar);
        }
        return star;
    }

Et l'utiliser comme ça

button.setText (getIntToStar (4));

1

La valeur par défaut est définie avec android: rating dans la présentation XML.

1
Kevin Gaudin

Vous pouvez ajouter un classement par défaut de cinq étoiles dans la mise en page XML.

Android:rating="5"

Modifier: 

<RatingBar
        Android:id="@+id/rb_vvm"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_gravity="center_horizontal"
        Android:layout_marginBottom="@dimen/space2"
        Android:layout_marginTop="@dimen/space1"
        style="@style/RatingBar"
        Android:numStars="5"
        Android:stepSize="1"
        Android:rating="5" />
1
Gaurav Shetty
<LinearLayout 
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content" >

    <RatingBar
        Android:id="@+id/ruleRatingBar"
        Android:isIndicator="true"
        Android:numStars="5"
        Android:stepSize="0.5"
        style="?android:attr/ratingBarStyleSmall"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        />
</LinearLayout>
0
Muzikant

Une autre possibilité est que vous utilisiez l'évaluation dans la vue liste de l'adaptateur

View Android.view.LayoutInflater.inflate(int resource, ViewGroup root, boolean attachToRoot)

Les paramètres ci-dessous sont nécessaires au bon fonctionnement de tous les attributs:

  1. Réglez lerootsurparent
  2. booleanattachToRootasfalse

Ex: convertView = inflater.inflate (R.layout.myId, parent, false);

0
Devrath

J'ai trouvé que la RatingBar s'étendait sur un nombre maximal d'étoiles car elle était incluse dans une table avec l'attribut Android:stretchColumns = "*".

Une fois que j'ai enlevé stretchCoulumns de toutes les colonnes, la RatingBar s'est affichée en fonction de la valeur Android:numStars

0
Jon