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
<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)
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.
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
.
En outre, si vous définissez un layout_weight
, cela remplace l'attribut numStars
.
<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
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.
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.
Si vous utilisez
Android:layout_width="match_parent"
Utilisez wrap_content et ne montrera que les numStars définis :)
Android:layout_width="wrap_content"
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!
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.
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));
La valeur par défaut est définie avec android: rating dans la présentation XML.
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" />
<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>
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:
root
surparent
attachToRoot
asfalse
Ex: convertView = inflater.inflate (R.layout.myId, parent, false);
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