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

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)

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.


25

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


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.


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.


6

Jika Anda menggunakan

android:layout_width="match_parent"

Gunakan wrap_content dan itu hanya akan menampilkan set numStars :)

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

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


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.


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!


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.


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


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

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


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

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


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


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 .


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.