Cómo hacer RatingBar para mostrar cinco estrellas

98

Estoy siguiendo el ejemplo estándar de cómo agregar un archivo RatingBar. Para controlar la cantidad de estrellas que intenté usar android:numStars="5". El problema es que la cantidad de estrellas no parece hacer nada en absoluto. En formato vertical obtengo 6 estrellas y cuando doy la vuelta al teléfono obtengo alrededor de 10 estrellas. Intenté establecer el número de estrellas en mi Actividad ( myBar.setNumStars(5)) que carga el xml pero tampoco tuve éxito con esa opción.

Entonces, mi pregunta es ¿cómo defino mi diseño para que solo muestre cinco estrellas? El conjunto numStarsno parece funcionar.

Gracias de antemano, Roland

Roland
fuente

Respuestas:

180
<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" />

en codigo

mRatingBar.setRating(int)
Alex Volovoy
fuente
120
Gracias por tu respuesta. El problema era que no se puede usar android: layout_width = "fill_parent" ya que el RatingBar aparentemente ignora el android: numStars othervise. : - /
Roland
3
Mi requisito es configurar la barra de calificación para completar el padre o el padre, pero con estrellas fijas, es decir, 5. ¿Cómo se hace? ¿Es posible?
Prashanth Debbadwar
@PrashanthDebbadwar ¿has probado 3 tamaños diferentes en el atributo "estilo"? por ejemplo, ratingBarStyle
M. Usman Khan
65

La RatingBar.setNumStardocumentación dice:

Establece el número de estrellas que se mostrarán. Para que se muestren correctamente, se recomienda que el ancho del diseño de este widget sea contenido envolvente.

Por lo tanto, establecer el ancho del diseño en wrap_contentdebería resolver este problema.

Lisandro
fuente
25

Esto funcionó para mí: RatingBardebería estar dentro, LinearLayoutademás de tener el ancho del diseño configurado para envolver el contenido RatingBar.

Supun
fuente
1
Sin embargo, @ValentinGalea no es tan extraño: la barra de calificación se preocupa por su propio ancho, mientras que el LinearLayout externo se preocupa por llenar el ancho de su diseño principal.
TechNyquist
13

Además, si establece un layout_weight, esto reemplaza al numStarsatributo.

jsimon
fuente
2
Esto realmente debería estar en los documentos. Descubrí que incluso agregar una configuración de margen derecho también elimina numStars
Anton I. Sipos
Este fue un buen consejo. Quité el acolchado para que finalmente funcionara para mí.
Tha Leang
7

Solo debe usar numStars="5"en su XML y configurar android:layout_width="wrap_content".
Luego, puedes jugar con estilos y otras cosas, pero el "wrap_content" en layout_width es lo que hace el truco.

Adrián Alvarez
fuente
6

Si esta usando

android:layout_width="match_parent"

Use wrap_content y solo mostrará el conjunto numStars :)

android:layout_width="wrap_content"

MQoder
fuente
5
<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" 
                    />

Configure el número de estrellas en el archivo XML ... No es necesario proporcionarlo en Estilos o Actividad / Fragmento ... IMPORTANTE: Asegúrese de poner el ANCHO como contenido envolvente y los pesos no están habilitados

Ajith Memana
fuente
5

También estoy enfrentando el problema de exceder las estrellas que el número especificado de estrellas. Para esto, no queremos preocuparnos por el tipo de diseño, ya sea relativo o lineal. Simplemente use el ancho de la siguiente manera:

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


Por favor, evite el uso de match_parent y fill_parent para ratingbar .
Espero que las cosas sean de ayuda.

Deva
fuente
3

Incluso yo estaba enfrentando el problema @Roland, había incluido un atributo más llamado

android:layout_alignParentRight="true" 

en mi RatingBardeclaración en XML. Este atributo impidió establecer las estrellas requeridas y configurar elNumStars

¡Manténgase informado sobre los problemas que encuentre!

ReachmeDroid
fuente
Solo ayudé a un amigo con lo mismo. Sugerí este enfoque y más tarde descubrí que no era válido.
AdamMc331
3

Para mí, tuve un problema hasta que quité el relleno. Parece que hay un error en ciertos dispositivos que no altera el tamaño de la vista para acomodar el relleno, sino que comprime el contenido.

Eliminar padding, usar layout_marginen su lugar.

John Leehey
fuente
1

Para mostrar una calificación de estrellas simple en una figura redonda, simplemente use este código

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

Y úsalo así

button.setText (getIntToStar (4));

Nandan Kumar Singh
fuente
1

Puede agregar una calificación predeterminada de cinco estrellas al lado del diseño xml

android:rating="5"

Editar:

<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" />
Gaurav Shetty
fuente
Aclare con un ejemplo cómo agregar esto al diseño xml.
Kurt Van den Branden
He agregado la vista completa.
Gaurav Shetty
1

Si está ajustando el RatingBarinterior ConstraintLayouta match_constraintpor su ancho, la vista previa del editor mostrará una cantidad de estrellas proporcional a su ancho real, sin importar si establece la android:numStarspropiedad. Úselo wrap_contentpara obtener la vista previa correcta:

<RatingBar android:id="@+id/myRatingBar"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_marginStart="48dp"
           android:layout_marginEnd="48dp"
           android:numStars="5"
           app:layout_constraintEnd_toEndOf="parent"
           app:layout_constraintStart_toStartOf="parent"
           app:layout_constraintTop_toBottomOf="parent" />
Nicola Gallazzi
fuente
0
<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>
Muzikant
fuente
0

Descubrí que se RatingBarextendía a un número máximo de estrellas porque estaba encerrado en una Tabla con el atributo android:stretchColumns = "*".

Una vez que stretchCoulumnsquité todas las columnas, se RatingBarmuestran de acuerdo con el android:numStarsvalor

Jon
fuente
0

Otra posibilidad es que esté utilizando la clasificación en el adaptador de la vista de lista

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

Los siguientes parámetros son necesarios para que todos los atributos funcionen correctamente:

  1. Establecer rootenparent
  2. booleano attachToRootcomofalse

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

Devrath
fuente
0

Lo que realmente importa aquí es usar en wrap_contentlugar de match_parent. Si va a utilizar, match_parentel diseño se rellenará con las estrellas, incluso si es más que la variable numStars .

Nauman Khaliq
fuente
1
¿Podría proporcionar algunos ejemplos útiles?
Alex L.
sí, en el padre del partido mostraba inicio 8, pero en el contenido final mostraba 5
Vipin Sharma