2013-03-19 17 views
14

Chcę wyświetlić pasek oceny za pośrednictwem okna dialogowego alertu w mojej aplikacji na Androida. Problemem, który napotykam, jest to, że w zależności od szerokości ekranu, pasek ocen pokazuje ponad 5 gwiazdek (do 10) w trybie poziomym, a funkcja setNumStars() nie ma żadnego efektu. Są już posty zajmujące się tym problemem, ale mają do czynienia z paskiem ocen, którego tekst jest zdefiniowany statycznie, podczas gdy ja tworzę go dynamicznie. Jak rozwiązać ten problem?Android Ocena Wyświetl więcej niż 5 gwiazdek

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

} 
} 

Próbowałem za pomocą układu statycznego dla ratingbar ale kiedy to zrobić i spróbować wyświetlić ratingbar pośrednictwem okna alertu bez gwiazd są widoczne. Oto plik układ na pasku ocena:

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

Spróbuj ustawić rozmiar kroku jako 0.1 – Triode

Odpowiedz

8

Spróbuj ustawić wartość maksymalną dla Twojej RatingBar jak poniżej

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

utworzyć plik xml w pliku layoutu i ustawić to jako zawartość

Zmień swoją funkcję showDialog tak

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

Te zmiany nie mają wpływu. – user1107888

+0

Kiedy zadeklarowałem w pliku xml i ustawiłem zawartość działa poprawnie, jeśli chcesz, mogę wysłać kod – Triode

+0

Tak, jeśli to nie jest dla ciebie problem – user1107888

17

se zmiana paska ratingu na "zawijanie treści" rozwiązuje cały problem. Zgodnie z dokumentacją:

Ustawia liczbę gwiazdek do wyświetlenia. Aby były one odpowiednio wyświetlane, zaleca się, aby szerokość tego widgetu była zawijana na zawartość .

13

ustawić android: numStars = "5" i Android: layout_width = "wrap_content"

0

keep rodzic od baru jako układzie liniowym i trzymać nic innego w tym układzie liniowym, który pracował dla mnie

This blog pokazuje przejrzysty obraz rozwiązania

Powiązane problemy