Podążam za standardowym przykładem dodawania pliku RatingBar
. Aby kontrolować liczbę gwiazdek, których próbowałem użyć android:numStars="5"
. Problem w tym, że liczba gwiazd wydaje się nic nie robić. W układzie portretowym dostaję 6 gwiazdek, a kiedy odwrócę telefon, dostaję około 10 gwiazdek. Próbowałem ustawić liczbę gwiazdek w mojej aktywności ( myBar.setNumStars(5)
), która ładuje plik xml, ale ta opcja również się nie powiodła.
Więc moje pytanie brzmi, jak zdefiniować mój układ, aby wyświetlał tylko pięć gwiazdek? Zestaw numStars
wydaje się nie działać.
Z góry dziękuję, Roland
RatingBar.setNumStar
Dokumentacja mówi:Zatem ustawienie szerokości układu na
wrap_content
powinno rozwiązać ten problem.źródło
To zadziałało dla mnie:
RatingBar
powinno być wewnątrzLinearLayout
innego niż ustawienie szerokości układu do zawijania zawartościRatingBar
.źródło
Dodatkowo, jeśli ustawisz
layout_weight
, to zastępujenumStars
atrybut.źródło
Powinieneś po prostu użyć
numStars="5"
w swoim XML i ustawićandroid:layout_width="wrap_content"
.Następnie możesz bawić się stylami i innymi rzeczami, ale „wrap_content” w layout_width jest tym, co załatwia sprawę.
źródło
Jeśli używasz
android:layout_width="match_parent"
Użyj wrap_content, a pokaże tylko zestaw numStars :)
android:layout_width="wrap_content"
źródło
<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" />
Skonfiguruj liczbę gwiazdek w pliku XML ... Nie musisz podawać jej w stylach lub aktywności / fragmencie ... WAŻNE: upewnij się, że ustawiłeś SZEROKOŚĆ jako zawartość zawijania i wagi nie są włączone
źródło
Stoję również przed problemem, że liczba gwiazd przekracza określoną liczbę. W tym celu nie chcemy martwić się o typ układu, względny lub liniowy. Po prostu użyj szerokości w następujący sposób:
Należy unikać korzystania match_parent i fill_parent dla ratingbar .
Mam nadzieję, że te rzeczy będą pomocne.
źródło
Nawet ja miałem problem z @Roland, dodałem jeszcze jeden atrybut o nazwie
w mojej
RatingBar
deklaracji w XML. Ten atrybut uniemożliwił ustawienie wymaganych gwiazd i skonfigurowanieNumStars
Bądź na bieżąco z napotkanymi problemami!
źródło
Dla mnie miałem problem, dopóki nie usunąłem wyściółki. Wygląda na to, że na niektórych urządzeniach jest błąd, który nie zmienia rozmiaru widoku w celu dostosowania dopełnienia, a zamiast tego kompresuje zawartość.
Usunąć
padding
, użyjlayout_margin
zamiast tego.źródło
Aby wyświetlić prostą ocenę w postaci okrągłej liczby gwiazdek, użyj tego kodu
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; }
I używaj tego w ten sposób
button.setText (getIntToStar (4));
źródło
Możesz dodać domyślną ocenę pięciu gwiazdek z boku układu XML
Edytować:
<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" />
źródło
Jeśli zawijasz
RatingBar
wnętrze aConstraintLayout
zematch_constraint
względu na szerokość, podgląd edytora pokaże liczbę gwiazdek proporcjonalną do jego rzeczywistej szerokości, bez względu na to, co jeśli ustawiszandroid:numStars
właściwość. Użyj,wrap_content
aby uzyskać poprawny podgląd:<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" />
źródło
Wartość domyślna jest ustawiana za pomocą andoid: rating w układzie xml.
źródło
<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>
źródło
Okazało się, że
RatingBar
rozciągnięty do maksymalnej liczby gwiazdek, ponieważ został ujęty w tabeli z atrybutemandroid:stretchColumns = "*"
.Gdy
stretchCoulumns
zdjąłem wszystkie kolumny,RatingBar
wyświetlono zgodnie zandroid:numStars
wartościąźródło
Inną możliwością jest to, że używasz oceny w adapterze widoku listy
Poniższe parametry są niezbędne, aby wszystkie atrybuty działały poprawnie:
root
naparent
attachToRoot
asfalse
Np .: convertView = inflater.inflate (R.layout.myId, rodzic, fałsz);
źródło
Właściwie tutaj jest użycie
wrap_content
zamiastmatch_parent
. Jeśli użyjeszmatch_parent
układu, zostanie on wypełniony gwiazdkami, nawet jeśli jest większy niż zmienna numStars .źródło