Android RatingBar mostrando más de 5 estrellas

Quiero mostrar una barra de calificación a través de un cuadro de diálogo de alerta en mi aplicación para Android. El problema que enfrento es que dependiendo del ancho de la pantalla, la barra de calificación muestra más de 5 estrellas (hasta 10) en modo horizontal y la función setNumStars () no tiene ningún efecto. Hay publicaciones que ya se ocupan de este problema, pero se ocupan de un ratingbar cuyo laout se define estáticamente mientras estoy creando dinámicamente. ¿Cómo resolver este problema?

public class MainActivity extends Activity { private Button launchButton; //Rating dialog private AlertDialog.Builder rater; private RatingBar ratingBar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); launchButton =(Button)findViewById(R.id.ratingButton); launchButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub //Here the alert dialog will be launched showRatingDialog(); } }); //Setting up rating dialog rater = new AlertDialog.Builder(this); rater.setTitle("This is the rating dialog"); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } public void showRatingDialog() { ratingBar = (RatingBar)findViewById(R.id.ratingStars); rater.setNegativeButton("Abbrechen", null); rater.setView(ratingBar); rater.show(); } } 

He intentado usar la disposición estática para la barra de la calificación pero cuando hago esto y trato de exhibir la barra de la calificación vía un diálogo alerta, las estrellas no se muestran. Aquí está el archivo de disposición para la barra de calificación:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <RatingBar android:id="@+id/ratingStars" android:layout_width="wrap_content" android:layout_height="wrap_content" android:numStars="5" android:stepSize="1" /> </LinearLayout> 

Trate de establecer el valor máximo para su RatingBar como abajo

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/active_bg" > <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" /> </RelativeLayout> 

Cree un archivo xml en su archivo de diseño y defina esto como el contenido

Cambie su función showDialog esta manera

 LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE); View layout = inflater.inflate(R.layout.***your_xml_name***)); editor.setView(layout); editor.show(); 

Establecer el ancho de la barra de clasificación para "envolver contenido" resuelve todo el problema. Según la documentación:

Define el número de estrellas que se mostrarán. Para que se muestren correctamente, se recomienda que el ancho de diseño de este widget contenga el contenido.

Establezca el android: numStars = "5" y android: layout_width = "wrap_content"

Mantener a los padres de la barra de calificación como disposición lineal y no mantener nada en ese diseño lineal, que funcionó para mí

Este blog muestra la imagen clara de la solución

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.