2013-03-19 11 views
14

Voglio mostrare una barra di valutazione tramite una finestra di avviso nella mia app Android. Il problema che sto affrontando è che, a seconda della larghezza dello schermo, la barra di valutazione mostra più di 5 stelle (fino a 10) in modalità orizzontale e la funzione setNumStars() non ha alcun effetto. Ci sono post che trattano già questo problema ma si occupano di una barra di valutazione il cui laout è definito staticamente mentre lo sto creando dinamicamente. Come risolvere questo problema?RatingBar Android con più di 5 stelle

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

} 
} 

Ho provato con il layout statico per il ratingbar, ma quando faccio questo e cerco di visualizzare il ratingbar tramite una finestra di avviso, nessuna stella sono mostrati. Ecco il file di layout per la barra Valutazione:

<?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> 
+0

tenta di impostare la dimensione del passo di 0,1 – Triode

risposta

8

tenta di impostare il valore massimo per il vostro RatingBar come qui di seguito

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

creare un file XML nel file di layout e impostare questo come il contenuto

Cambia la funzione showDialog come questo

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

Tali modifiche non hanno alcun effetto. – user1107888

+0

Quando ho dichiarato nel file xml e ho impostato il contenuto come funzionante, se posso posso inserire il codice – Triode

+0

Sì, se non c'è problema per te – user1107888

17

SE l'adattamento della larghezza del RatingBar a "wrap content" risolve l'intero problema. Secondo la documentazione:

Imposta il numero di stelle da mostrare. Affinché questi vengano visualizzati correttamente , è consigliabile che la larghezza del layout di questo widget sia il contenuto di .

13

impostare l'Android: numStars = "5" e Android: layout_width = "wrap_content"

0

mastio padre della barra di rating come il layout lineare e mantenere nient'altro che il layout lineare, che ha lavorato per me

This blog mostra il quadro chiaro della soluzione di

Problemi correlati