पांच स्टार दिखाने के लिए रेटिंगबार कैसे बनाएं


98

मैं कैसे जोड़ने के मानक उदाहरण का अनुसरण कर रहा हूं RatingBar। सितारों की संख्या को नियंत्रित करने के लिए मैंने उपयोग करने की कोशिश की android:numStars="5"। समस्या यह है कि सितारों की संख्या कुछ भी नहीं लगती है। पोर्ट्रेट-लेआउट में मुझे 6 स्टार मिलते हैं और जब मैं फोन को फ्लिप करता हूं तो मुझे लगभग 10 स्टार मिलते हैं। मैंने अपनी गतिविधि में तारों की संख्या निर्धारित करने की कोशिश की ( myBar.setNumStars(5)जो कि xml को लोड करती है लेकिन उस विकल्प के साथ भी कोई सफलता नहीं मिली।

तो मेरा सवाल यह है कि मैं अपने लेआउट को कैसे परिभाषित करूं ताकि यह केवल पांच सितारों को दिखाए? numStarsकाम करने के लिए सेट नहीं लगता है।

अग्रिम धन्यवाद, रोलैंड

जवाबों:


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

कोड में

mRatingBar.setRating(int)

120
आपके उत्तर के लिए धन्यवाद। समस्या यह थी कि आप एंड्रॉइड का उपयोग नहीं कर सकते हैं: लेआउट_ एक्सपोज़र = "fill_parent" जब से रेटिंगबायर उचित रूप से एंड्रॉइड को अनदेखा करता है: numStars othervise। : - /
रोलैंड

3
मेरी आवश्यकता माता-पिता या माता-पिता लेकिन निश्चित सितारों को भरने के लिए रेटिंगबार सेट कर रही है। 5. इसे कैसे करें? क्या यह संभव है?
प्रशान्त देबबदवार 11

@PrashanthDebbadwar ने "स्टाइल" विशेषता में 3 अलग-अलग आकारों की कोशिश की है? उदा। रेटिंगबर्टल
एम। उस्मान खान

65

RatingBar.setNumStarप्रलेखन कहते हैं:

दिखाने के लिए तारों की संख्या निर्धारित करता है। इन्हें ठीक से दिखाए जाने के लिए, यह अनुशंसा की जाती है कि इस विजेट की लेआउट चौड़ाई रैप कंटेंट हो।

तो wrap_contentइस समस्या को हल करने के लिए लेआउट चौड़ाई सेट करना चाहिए।


25

इसने मेरे लिए काम किया: सामग्री को लपेटने के लिए लेआउट चौड़ाई सेट के अलावा अन्य के RatingBarअंदर होना चाहिए ।LinearLayoutRatingBar


1
@ValentinGalea हालांकि इतना अजीब नहीं है: रेटिंग बार अपनी खुद की चौड़ाई को ध्यान में रखता है, जबकि बाहरी रैखिकयरआउट इसकी मूल लेआउट चौड़ाई को भरने के बारे में परवाह करता है।
TechNyquist

13

इसके अतिरिक्त, यदि आप एक सेट करते हैं layout_weight, तो यह numStarsविशेषता को बढ़ा देता है।


2
यह वास्तव में डॉक्स में होना चाहिए। मैंने पाया कि एक मार्जिन सही सेटिंग को जोड़ने पर भी स्तम्भों को फेंक दिया जाता है
एंटोन आई।

यह अच्छी सलाह थी। मैंने आखिरकार इसे मेरे लिए काम करने के लिए पैडिंग को हटा दिया।
था लीनग जूल

7

आपको बस numStars="5"अपने XML में उपयोग करना चाहिए , और सेट करना चाहिए android:layout_width="wrap_content"
फिर, आप शैलियों और अन्य सामानों के साथ खेल सकते हैं, लेकिन लेआउट_ एक्सपोजर में "रैप_ कॉन्टेंट" वह है जो चाल करता है।


6

यदि आप उपयोग कर रहे हैं

android:layout_width="match_parent"

Wra_content का उपयोग करें और यह केवल सेट 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" 
                    />

XML फ़ाइल में तारों की संख्या कॉन्फ़िगर करें ... इसे शैलियों या गतिविधि / प्रसार में प्रदान करने की आवश्यकता नहीं है .... महत्वपूर्ण: सुनिश्चित करें कि आप WIDTH को लपेटें सामग्री और भार सक्षम नहीं हैं।


5

मुझे इस समस्या का भी सामना करना पड़ रहा है कि तारों की संख्या निर्दिष्ट तारों की तुलना में अधिक है। इसके लिए, हम इस बारे में चिंता नहीं करना चाहते हैं कि लेआउट या तो सापेक्ष या रैखिक लेआउट जो भी हो। बस चौड़ाई का उपयोग इस प्रकार है:

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


कृपया रेटिंगबार के लिए match_parent और fill_parent का उपयोग करने से बचें । आशा है कि चीजें मददगार होंगी।


3

यहां तक ​​कि मैं इस मुद्दे का सामना कर रहा था @ रोलैंड, मैंने एक और विशेषता को बुलाया था

android:layout_alignParentRight="true" 

RatingBarXML में मेरे घोषणा पत्र में। यह विशेषता आवश्यक तारों को स्थापित करने और स्थापित करने से रोकती हैNumStars

आपके सामने आने वाले मुद्दों पर पोस्ट रखें!


बस उसी चीज से दोस्त की मदद की। मैंने इस दृष्टिकोण का सुझाव दिया, और बाद में पता चला कि यह अमान्य था।
AdamMc331

3

मेरे लिए, मेरे पास एक मुद्दा था जब तक मैंने पैडिंग को हटा नहीं दिया। ऐसा लगता है कि कुछ उपकरणों पर एक बग है जो पैडिंग को समायोजित करने के लिए दृश्य के आकार में परिवर्तन नहीं करता है, और इसके बजाय सामग्री को संपीड़ित करता है।

निकालें padding, layout_marginइसके बजाय का उपयोग करें ।


1

गोल आकृति में एक साधारण स्टार रेटिंग दिखाने के लिए बस इस कोड का उपयोग करें

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

और इसे इस तरह से उपयोग करें

button.setText (getIntToStar (4));


1

आप xml लेआउट के पक्ष में पाँच सितारों की डिफ़ॉल्ट रेटिंग जोड़ सकते हैं

android:rating="5"

संपादित करें:

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

कृपया इस पर एक उदाहरण के साथ स्पष्ट करें कि इसे xml लेआउट में कैसे जोड़ा जाए।
कर्ट वान डेन ब्रैंडन

मैंने पूरा दृश्य जोड़ दिया है।
गौरव शेट्टी

1

आप लपेटकर रहे हैं, तो RatingBarएक के अंदर ConstraintLayoutके साथ match_constraintइसकी चौड़ाई के लिए, संपादक पूर्वावलोकन कोई बात नहीं क्या अगर आप सेट अपने वास्तविक चौड़ाई के लिए आनुपातिक सितारे, के एक नंबर को दिखाने के लिए जा रहा है android:numStarsसंपत्ति। wrap_contentसही पूर्वावलोकन प्राप्त करने के लिए उपयोग करें :

<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अधिक से अधिक सितारों तक फैला हुआ है क्योंकि यह एक तालिका में विशेषता के साथ संलग्न था android:stretchColumns = "*"

एक बार जब मैंने stretchCoulumnsसभी कॉलमों को हटा दिया, RatingBarतो android:numStarsमूल्य के अनुसार प्रदर्शित किया गया


0

एक और संभावना है कि आप सूची दृश्य के एडाप्टर में रेटिंग का उपयोग कर रहे हैं

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

सभी विशेषताओं को ठीक से काम करने के लिए नीचे दिए गए परिम आवश्यक हैं:

  1. सेट rootकरने के लिएparent
  2. बूलियन के attachToRootरूप मेंfalse

Ex: ConvertView = inflater.inflate (R.layout.myId, जनक, गलत);


0

यहाँ पर वास्तविक चीज़ के wrap_contentबजाय उपयोग करना है match_parent। यदि आप उपयोग करेंगे match_parentतो लेआउट सितारों से भर जाएगा भले ही वह संख्या के बराबर हो।


1
क्या आप कुछ उपयोगी उदाहरण प्रदान कर सकते हैं?
एलेक्स एल।

हां, मैच पैरेंट पर यह 8 की शुरुआत दिखा रहा था, लेकिन रैप कंटेंट पर यह 5 दिखाया गया
विपिन शर्मा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.