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

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)

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.


25

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


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.


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.


6

Si esta usando

android:layout_width="match_parent"

Use wrap_content y solo mostrará el conjunto numStars :)

android:layout_width="wrap_content"


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


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.


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!


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.


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


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

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


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>

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


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


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 .


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.