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.