Cara membuat RatingBar menampilkan lima bintang

99

Saya mengikuti contoh standar tentang cara menambahkan file RatingBar. Untuk mengontrol jumlah bintang yang saya coba gunakan android:numStars="5". Masalahnya adalah jumlah bintang tampaknya tidak berpengaruh sama sekali. Dalam tata letak potret saya mendapatkan 6 bintang dan ketika saya membalik telepon saya mendapatkan sekitar 10 bintang. Saya mencoba mengatur jumlah bintang di Aktivitas saya ( myBar.setNumStars(5)) yang memuat xml tetapi tidak ada keberhasilan dengan opsi itu juga.

Jadi pertanyaan saya adalah bagaimana cara mendefinisikan tata letak saya sehingga hanya akan menampilkan lima bintang? Set numStarssepertinya tidak berfungsi.

Terima kasih sebelumnya, Roland

Roland
sumber

Jawaban:

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

dalam kode

mRatingBar.setRating(int)
Alex Volovoy
sumber
120
Terima kasih atas jawaban anda. Masalahnya adalah Anda tidak dapat menggunakan android: layout_width = "fill_parent" karena RatingBar sangat mengabaikan android: numStars othervise. : - /
Roland
3
Persyaratan saya adalah menyetel ratingbar untuk mengisi orang tua atau cocok dengan orang tua tetapi bintang tetap yaitu 5. bagaimana melakukannya? apa itu mungkin?
Prashanth Debbadwar
@PrashanthDebbadwar sudahkah Anda mencoba 3 ukuran berbeda dalam atribut "style"? mis. ratingBarStyle
M. Usman Khan
66

The RatingBar.setNumStardokumentasi mengatakan:

Menetapkan jumlah bintang untuk ditampilkan. Agar ini ditampilkan dengan benar, disarankan lebar tata letak widget ini menjadi konten bungkus.

Jadi mengatur lebar tata letak menjadi wrap_contentharus menyelesaikan masalah ini.

Lisandro
sumber
25

Ini berhasil untuk saya: RatingBarharus di dalam LinearLayoutselain memiliki lebar tata letak yang disetel untuk membungkus konten RatingBar.

Supun
sumber
1
@ValentinGalea tidak terlalu aneh: bilah peringkat memperhatikan lebarnya sendiri, sedangkan LinearLayout eksternal peduli tentang mengisi lebar tata letak induknya.
TechNyquist
13

Selain itu, jika Anda menyetel a layout_weight, ini menggantikan numStarsatribut.

jsimon
sumber
2
Ini seharusnya ada di dokumen. Saya menemukan bahwa bahkan menambahkan pengaturan margin yang tepat juga membuang numStars
Anton I. Sipos
Ini adalah nasihat yang bagus. Saya melepas bantalan untuk akhirnya membuatnya bekerja untuk saya.
Tha Leang
7

Anda hanya harus menggunakan numStars="5"XML Anda, dan set android:layout_width="wrap_content".
Kemudian, Anda dapat bermain-main dengan gaya dan hal-hal lain, tetapi "wrap_content" di layout_width adalah triknya.

Adrián Alvarez
sumber
6

Jika Anda menggunakan

android:layout_width="match_parent"

Gunakan wrap_content dan itu hanya akan menampilkan set numStars :)

android:layout_width="wrap_content"

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

Konfigurasikan jumlah Bintang dalam file XML ... Tidak perlu menyediakannya di Gaya atau Aktivitas / Fragmen .... PENTING: Pastikan Anda Menempatkan WIDTH sebagai konten Bungkus dan bobot tidak diaktifkan

Ajith Memana
sumber
5

Saya juga menghadapi masalah yang melebihi jumlah bintang daripada jumlah bintang yang ditentukan. Untuk ini, kami tidak ingin khawatir tentang jenis tata letak apa pun, baik tata letak relatif maupun linier. Cukup gunakan lebarnya sebagai berikut:

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


Harap hindari menggunakan match_parent dan fill_parent untuk ratingbar .
Semoga bisa membantu.

Deva
sumber
3

Bahkan saya menghadapi masalah @Roland, saya telah menyertakan satu atribut lagi yang disebut

android:layout_alignParentRight="true" 

dalam RatingBardeklarasi saya dalam XML. Atribut ini dicegah dari pengaturan bintang yang diperlukan dan pengaturanNumStars

Terus posting tentang masalah yang Anda temui!

ReachmeDroid
sumber
Baru saja membantu teman dengan hal yang sama. Saya menyarankan pendekatan ini, dan kemudian menemukan bahwa itu tidak valid.
AdamMc331
3

Bagi saya, saya memiliki masalah sampai saya melepas padding. Sepertinya ada bug di perangkat tertentu yang tidak mengubah ukuran tampilan untuk mengakomodasi padding, dan malah memampatkan konten.

Hapus padding, gunakan layout_marginsebagai gantinya.

John Leehey
sumber
1

Untuk menunjukkan peringkat bintang sederhana dalam gambar bulat cukup gunakan kode ini

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

Dan gunakan seperti ini

button.setText (getIntToStar (4));

Nandan Kumar Singh
sumber
1

Anda dapat menambahkan peringkat default lima bintang di samping tata letak xml

android:rating="5"

Edit:

<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" />
Gaurav Shetty
sumber
Harap klarifikasi dengan contoh tentang cara menambahkan ini ke tata letak xml.
Kurt Van den Branden
Saya telah menambahkan tampilan lengkap.
Gaurav Shetty
1

Jika Anda membungkus bagian RatingBardalam ConstraintLayoutdengan match_constraintuntuk lebarnya, pratinjau editor akan menampilkan sejumlah bintang yang sebanding dengan lebar sebenarnya, tidak peduli bagaimana jika Anda menyetel android:numStarsproperti. Gunakan wrap_contentuntuk mendapatkan pratinjau yang benar:

<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" />
Nicola Gallazzi
sumber
0

Nilai default disetel dengan andoid: rating dalam tata letak xml.

Kevin Gaudin
sumber
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>
Muzikant
sumber
0

Saya menemukan bahwa angka tersebut RatingBardirentangkan hingga jumlah maksimum bintang karena itu tertutup dalam Tabel dengan atribut android:stretchColumns = "*".

Setelah saya stretchCoulumnsmelepas semua kolom, RatingBarditampilkan sesuai dengan android:numStarsnilainya

Jon
sumber
0

Kemungkinan lainnya adalah Anda menggunakan Rating di Adaptor tampilan daftar

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

Parameter di bawah ini diperlukan agar semua atribut berfungsi dengan baik:

  1. Setel rootkeparent
  2. boolean attachToRootsebagaifalse

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

Devrath
sumber
0

Hal yang sebenarnya di sini adalah dengan menggunakan wrap_contentbukan match_parent. Jika Anda akan menggunakan match_parenttata letak akan diisi dengan bintang-bintang meskipun lebih dari variabel numStars .

Nauman Khaliq
sumber
1
Bisakah Anda memberikan beberapa contoh berguna?
Alex L.
ya, pada pertandingan induk itu menunjukkan 8 mulai, tetapi pada konten bungkus itu menunjukkan 5
Vipin Sharma