140 votes

Comment faire un RatingBar plus petit ?

J’ai ajouté un RatingBar dans une mise en page :

Mais le style par défaut de la barre de la cote est trop grand. J’ai trie de la modifier en ajoutant le style android :``

Mais le résultat est trop petit et il est impossible de fixer un taux avec cette propriété.

Comment pourrais je faire ?

196voto

Pied Piper Points 5554

Comment coller le code donné ici ...

Étape-1. Vous avez besoin de votre propre étoiles de notation en res/drawable ...

A full star

Empty star

Étape-2 res/drawable vous avez besoin d' ratingstars.xml suite ...

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+android:id/background"
          android:drawable="@drawable/star_empty" />
    <item android:id="@+android:id/secondaryProgress"
          android:drawable="@drawable/star_empty" />
    <item android:id="@+android:id/progress"
          android:drawable="@drawable/star" />
</layer-list>

Étape-3 res/values vous avez besoin d' styles.xml suite ...

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="foodRatingBar" parent="@android:style/Widget.RatingBar">
        <item name="android:progressDrawable">@drawable/ratingstars</item>
        <item name="android:minHeight">22dip</item>
        <item name="android:maxHeight">22dip</item>
    </style>
</resources>

Étape 4 Dans votre mise en page ...

<RatingBar 
      android:id="@+id/rtbProductRating"
      android:layout_height="wrap_content"
      android:layout_width="wrap_content"
      android:numStars="5"
      android:rating="3.5"
      android:isIndicator="false"
      style="@style/foodRatingBar"    
/>  

112voto

Farray Points 3748

Par défaut la barre d'evaluation widget est sorta de lame".

La source fait référence à un style "?android:attr/ratingBarStyleIndicator "" ?android:attr/ratingBarStyleSmall" que vous êtes déjà familier avec. ratingBarStyleIndicator est légèrement plus petit, mais il est encore assez laid et les commentaires noter que ces styles "ne prennent pas en charge l'interaction".

Vous êtes probablement mieux rouler votre propre. Il y a de plus convenable à la recherche guide à http://kozyr.zydako.net/2010/05/23/pretty-ratingbar/ montrant comment le faire. (Je n'ai pas fait moi-même encore, mais va tenter dans un jour ou deux.)

Bonne chance!

p.s. Désolé, allais poster un lien vers la source pour vous de fouiner dans mais je suis un nouvel utilisateur et ne peut pas afficher plus de 1 URL. Si vous creusez votre chemin à travers l'arbre source, il est situé à la frameworks/base/core/java/android/widget/RatingBar.java

46voto

zyamys Points 309

Il n'est pas nécessaire d'ajouter un écouteur à l' ?android:attr/ratingBarStyleSmall. Ajoutez simplement android:isIndicator=false et il va capturer cliquez sur événements, par exemple

<RatingBar
  android:id="@+id/myRatingBar"
  style="?android:attr/ratingBarStyleSmall"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:numStars="5"
  android:isIndicator="false" />

20voto

Bouchehboun Saad Points 378

l'affichage d'une œuvre par le système d'exploitation

<RatingBar
    android:id="@+id/ratingBar"
    style="?android:attr/ratingBarStyleSmall"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" 
    />

15voto

user1676075 Points 1586

J'ai trouvé une solution plus facile que je pense donnée par celles ci-dessus et plus facile que de rouler votre propre. J'ai simplement créé une petite cote de la barre, puis ajouté un onTouchListener. À partir de là, j'ai calculer la largeur du clic et de déterminer le nombre d'étoiles à partir de cela. Après avoir utilisé plusieurs fois, la seule bizarrerie que j'ai trouvé c'est que le dessin d'une petite cote de bar ne pas toujours se transformer en une table à moins que j'ai placer dans un LinearLayout (regarde droit dans l'éditeur, mais pas l'appareil). De toute façon, dans ma mise en page:

            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" >
                <RatingBar
                    android:id="@+id/myRatingBar"
                    style="?android:attr/ratingBarStyleSmall"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:numStars="5" />
            </LinearLayout>

et au sein de mon activité:

    final RatingBar minimumRating = (RatingBar)findViewById(R.id.myRatingBar);
    minimumRating.setOnTouchListener(new OnTouchListener()
    { 
        public boolean onTouch(View view, MotionEvent event)
        { 
            float touchPositionX = event.getX();
            float width = minimumRating.getWidth();
            float starsf = (touchPositionX / width) * 5.0f;
            int stars = (int)starsf + 1;
            minimumRating.setRating(stars);
            return true; 
        } 
    });

J'espère que cela aide quelqu'un d'autre. Certainement plus facile que de dessiner son propre (bien que j'ai trouvé qui fonctionne aussi, mais je voulais juste une utilisation simple de stars).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X