Beş yıldız göstermek için RatingBar nasıl yapılır


100

Nasıl ekleneceğine dair standart örneği takip ediyorum RatingBar. Kullanmaya çalıştığım yıldız sayısını kontrol etmek için android:numStars="5". Sorun, yıldız sayısının hiçbir şey yapmadığıdır. Portre düzeninde 6 yıldız alıyorum ve telefonu çevirdiğimde yaklaşık 10 yıldız alıyorum. Aktivitemde ( myBar.setNumStars(5)) xml'yi yükleyen yıldızların sayısını ayarlamaya çalıştım, ancak bu seçenekle de başarı sağlanamadı.

Öyleyse sorum, düzenimi yalnızca beş yıldız gösterecek şekilde nasıl tanımlayabilirim? Set numStarsçalışmıyor gibi görünüyor.

Şimdiden teşekkürler, Roland

Yanıtlar:


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

kodda

mRatingBar.setRating(int)

121
Cevabınız için teşekkürler. Sorun şu ki, RatingBar apperenty android: numStars othervise'ı yok saydığı için android: layout_width = "fill_parent" kullanamazsınız. : - /
— Roland

3
Benim ihtiyacım, derecelendirme çubuğunu ebeveyni dolduracak şekilde ayarlamak veya üst öğe ile eşleşecek ancak yıldızları sabitlemek, yani 5. nasıl yapılır? mümkün mü?
— Prashanth Debbadwar

@PrashanthDebbadwar "style" niteliğinde 3 farklı boyut denediniz mi? eg ratingBarStyle
— M. Usman Khan

67

RatingBar.setNumStarDokümantasyon diyor ki:

Gösterilecek yıldız sayısını ayarlar. Bunların düzgün gösterilebilmesi için, bu widget'ın düzen genişliğinin sarma içeriği olması önerilir.

Bu nedenle, düzen genişliğini ayarlamak wrap_contentbu sorunu çözmelidir.


25

Benim için çalıştı Bu: RatingBariçeride olmalı LinearLayoutiçin sarma içeriğe seti genişliği düzenini sahip dışındaki RatingBar.


1
@ValentinGalea o kadar da garip değil: derecelendirme çubuğu kendi genişliğini dikkate alırken, harici LinearLayout ana düzen genişliğini doldurmayı önemsiyor.
— TechNyquist

13

Ek olarak, bir ayarlarsanız layout_weightbu, numStarsözniteliğin yerini alır .


2
Bu gerçekten belgelerde olmalı. Doğru marj ayarı eklemenin bile numStars
— Anton I. Sipos

Bu iyi bir tavsiyeydi. Sonunda benim için çalışmasını sağlamak için dolguyu kaldırdım.
— Tha Leang

7

Sadece XML'inizde kullanmalı numStars="5"ve ayarlamalısınız android:layout_width="wrap_content".
Ardından, stiller ve diğer şeyler ile oynayabilirsiniz, ancak işin püf noktası layout_width'teki "wrap_content".


6

Eğer kullanıyorsanız

android:layout_width="match_parent"

Wrap_content kullanın ve yalnızca ayarlanan sayıları gösterecektir :)

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

XML dosyasındaki Yıldızların sayısını yapılandırın ... Stiller veya Etkinlik / Parça olarak sağlamanıza gerek yok .... ÖNEMLİ: WIDTH'yi Sarma içeriği olarak koyduğunuzdan ve ağırlıkların etkinleştirilmediğinden emin olun


5

Ayrıca yıldızların belirtilenden daha fazla yıldız sayılması sorunu ile karşı karşıyayım. Bunun için, göreli veya doğrusal düzen ne olursa olsun düzen türü hakkında endişelenmek istemiyoruz. Genişliği aşağıdaki gibi kullanmanız yeterlidir:

ratingBar.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));


Lütfen önlemek kullanarak match_parent ve fill_parent için ratingbar .
Umarım her şey yardımcı olur.


3

@Roland sorunuyla karşılaştığımda bile, adında bir özellik daha eklemiştim

android:layout_alignParentRight="true" 

Benim de RatingBarXML bildiriminde. Bu özellik, gerekli yıldızları ayarlamasını veNumStars

Karşılaştığınız sorunları haberdar edin!


Sadece aynı konuda bir arkadaşa yardım ettim. Bu yaklaşımı önerdim ve daha sonra geçersiz olduğunu öğrendim.
— AdamMc331

3

Benim için, dolguyu kaldırana kadar bir sorun yaşadım. Görünüşe göre bazı cihazlarda, dolguyu barındırmak için görünümün boyutunu değiştirmeyen ve bunun yerine içeriği sıkıştıran bir hata var.

Kaldır padding, layout_marginonun yerine kullan.


1

Basit bir yıldız derecelendirmesini yuvarlak şekilde göstermek için bu kodu kullanın

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

Ve bunu böyle kullan

button.setText (getIntToStar (4));


1

Xml düzeninin yan tarafına varsayılan olarak beş yıldız derecesi ekleyebilirsiniz

android:rating="5"

Düzenle:

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

Lütfen bunun xml düzenine nasıl ekleneceğini bir örnekle açıklığa kavuşturun.
— Kurt Van den Branden

Tam görünümü ekledim.
— Gaurav Shetty

1

Eğer sarma varsa RatingBarbir iç ConstraintLayoutile match_constraintgenişliği için, editör önizleme ne olursa olsun eğer kümesi gerçek genişliğine orantılı yıldız, bir sayısını göstermek için gidiyor android:numStarsözellik. wrap_contentDoğru önizlemeyi elde etmek için kullanın :

<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

RatingBarÖzniteliğiyle bir Tablo içine alındığı için maksimum sayıda yıldıza gerildiğini buldum android:stretchColumns = "*".

Çektiğim kez stretchCoulumnstüm sütunları kapalı, RatingBargöre görüntülenir android:numStarsdeğeri


0

Başka bir olasılık da, liste görünümünün Bağdaştırıcısındaki Derecelendirmeyi kullanıyor olmanızdır

View android.view.LayoutInflater.inflate(int resource, ViewGroup root, boolean attachToRoot)

Tüm özelliklerin düzgün çalışması için aşağıdaki parametreler gereklidir:

  1. Set rootiçinparent
  2. boole attachToRootolarakfalse

Ör: convertView = inflater.inflate (R.layout.myId, parent, false);


0

Buradaki asıl şey wrap_contentyerine kullanmaktır match_parent. Kullanacaksanız match_parentdüzen, numStars değişkeninden fazla olsa bile yıldızlarla doldurulacaktır .


1
Bazı yararlı örnekler verebilir misiniz?
— Alex L.

evet, maç ebeveyninde 8 başlangıç ​​gösteriyordu, ancak paket içeriğinde 5 gösteriyordu
— Vipin Sharma
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.