छोटा रेटिंगबार कैसे बनाएं?


134

मैंने एक लेआउट में एक रेटिंगबार जोड़ा है :

<RatingBar 
    android:id="@+id/ratingbar"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:numStars="5"
    android:stepSize="1.0"
    />  

लेकिन रेटिंग बार के लिए डिफ़ॉल्ट शैली बहुत बड़ी है।
मैंने इसे एंड्रॉइड स्टाइल को जोड़कर बदलने की कोशिश की है:style="?android:attr/ratingBarStyleSmall"

लेकिन परिणाम बहुत छोटा है और इस संपत्ति के साथ एक दर निर्धारित करना असंभव है।

मैं कैसे कर सकता था?

जवाबों:


106

डिफ़ॉल्ट RatingBar विजेट 'lame है।

स्रोत उस शैली के संदर्भ में " ?android:attr/ratingBarStyleIndicator" बनाता है, ?android:attr/ratingBarStyleSmallजिसके साथ आप पहले से परिचित हैं। ratingBarStyleIndicatorथोड़ा छोटा है, लेकिन यह अभी भी बहुत बदसूरत है और टिप्पणी ध्यान दें कि ये शैली "बातचीत का समर्थन नहीं करती हैं"।

आप शायद अपने आप को रोल-ऑफ कर रहे हैं। Http://kozyr.zydako.net/2010/05/23/pretty-ratingbar/ पर एक सभ्य दिखने वाला मार्गदर्शक है कि यह कैसे करना है। (मैंने इसे अभी तक खुद नहीं किया है, लेकिन एक-एक दिन में प्रयास करूंगा।)

सौभाग्य!

ps क्षमा करें, आपके लिए स्रोत के लिए एक लिंक पोस्ट करने जा रहा था, लेकिन मैं एक नया उपयोगकर्ता हूं और 1 से अधिक URL पोस्ट नहीं कर सकता। यदि आप स्रोत के पेड़ के माध्यम से अपना रास्ता खोदते हैं, तो यह चौखटे / आधार / कोर / जावा / एंड्रॉइड / विजेट / रेटिंग सर्वर पर स्थित है।


इसका उपयोग करना बेहतर है; Android: attr / RatingBarStyleSmall और वैश्विक रेटिंग थीम सेट करें, लेकिन बिल्कुल थीम नाम का उपयोग न करें, बहुत बहुत धन्यवाद;)
Tsung Goh

7
अगर हम इंडिकेटर प्रॉपर्टी सेट करते हैं android: isIndicator = "false" की तुलना में हम इसके साथ बातचीत करेंगे ..
मयूर आर। अमिपारा

डॉक्स मतलब ratingBarStyleSmall दो की छोटी है। मुझे लगता है कि आपकी टिप्पणी पिछड़ी हुई है।
AdamMc331

5
लिंक टूट गया है।
डेनी

@ पैसा सामग्री Google कैश से उपलब्ध है । मैं उस सामग्री के साथ पोस्ट को अपडेट नहीं कर रहा हूं जैसा कि मैंने वर्षों में एंड्रॉइड रेटिंग बार नहीं देखा है, और निश्चित नहीं हूं कि उस लिंक की सामग्री अभी भी मान्य है।
फर्रे

195

यहां दिए गए कोड को कैसे गोंद करें ...

चरण 1। आपको अपने स्वयं के रेटिंग सितारों की आवश्यकता है res/drawable...

एक पूर्ण सितारा

खाली तारा

चरण -2 res/drawableआपको ratingstars.xmlनिम्न प्रकार की आवश्यकता है ...

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@android:id/background"
          android:drawable="@drawable/star_empty" />
    <item android:id="@android:id/secondaryProgress"
          android:drawable="@drawable/star_empty" />
    <item android:id="@android:id/progress"
          android:drawable="@drawable/star" />
</layer-list>

चरण -3 res/valuesआपको styles.xmlनिम्न प्रकार की आवश्यकता है ...

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="foodRatingBar" parent="@android:style/Widget.RatingBar">
        <item name="android:progressDrawable">@drawable/ratingstars</item>
        <item name="android:minHeight">22dip</item>
        <item name="android:maxHeight">22dip</item>
    </style>
</resources>

चरण -4 अपने लेआउट में ...

<RatingBar 
      android:id="@+id/rtbProductRating"
      android:layout_height="wrap_content"
      android:layout_width="wrap_content"
      android:numStars="5"
      android:rating="3.5"
      android:isIndicator="false"
      style="@style/foodRatingBar"    
/>  

7
इसे न देखें: <आइटम Android: id = "@ + android: id / secondaryProgress" Android: drawable = "@ drawable / star_empty" /> be "@ drawable / star_half" /> या जो भी आप इसे कहते हैं?
स्टैकऑवरफ्लो

8
बहुत बहुत धन्यवाद। हालांकि, बस एक छोटी सी टिप्पणी: आपको आधे स्टार की कोई छवि नहीं चाहिए। यह स्वचालित रूप से प्रगति के आधार पर उत्पन्न होगा।
बोरिस स्ट्रैंडजेव

1
@ व्लाद जवाब की पहली पंक्ति मैंने उल्लेख किया है कि मुझे यह कहाँ से मिला है।
वैभव जानी

4
पूरी तरह से काम करता है :), लेकिन मुझे 2 मुद्दे मिल गए .. numStars अब और काम नहीं करता है, और मैं इसे थोड़ा बड़ा भी कर सकता हूं, भले ही मैं अधिकतम और न्यूनतम चौड़ाई निर्धारित
करूं

1
धन्यवाद @PiedPiper - इससे मेरा बहुत समय बच गया !! सबसे अच्छा स्पष्टीकरण कभी!
एडमंड टैमास

70

महज प्रयोग करें:

android:scaleX="0.5"
android:scaleY="0.5"

अपनी जरूरत के हिसाब से स्केल फैक्टर बदलें।

बाईं ओर पैडिंग बनाए बिना स्केल करने के लिए भी जोड़ते हैं

android:transformPivotX="0dp"

स्केलएक्स स्केल अच्छा है लेकिन बदसूरत पैडिंग छोड़ दें, यदि आप उस पैडिंग से छुटकारा पा सकते हैं तो यह सबसे आसान सही उत्तर होगा
अहमद द्विक 'वारलॉक'

इसके अलावा, उन्हें
औसत डिस्को

6
मैं बदसूरत (दाएं) पैडिंग को हल करता हूं codeandroid:scaleX="0.75" android:scaleY="0.75" android:layout_marginRight="-25dp"
हॅन्स कान

1
यद्यपि यह सबसे आसान समाधान की तरह दिखता है, लेकिन यह मेरे लिए काम नहीं करता था। किसी कारण से कोई प्रभाव नहीं पड़ा। क्या यह इसलिए है क्योंकि मैं एंड्रॉइड 5.x पर हूं?
नॉटिलस

आप रेटिंग बार पूर्व की ऊंचाई निर्दिष्ट करके कुछ अतिरिक्त पैडिंग निकाल सकते हैं:android:layout_height="40dp"
मनोहर रेड्डी

43

इसमें श्रोता को जोड़ने की आवश्यकता नहीं है ?android:attr/ratingBarStyleSmall। बस जोड़ें android:isIndicator=falseऔर यह क्लिक इवेंट्स को कैप्चर करेगा, उदा

<RatingBar
  android:id="@+id/myRatingBar"
  style="?android:attr/ratingBarStyleSmall"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:numStars="5"
  android:isIndicator="false" />

4
isIndicator कुंजी है!
डेडफिश

19

ओएस द्वारा लागू एक छोटा

<RatingBar
    android:id="@+id/ratingBar"
    style="?android:attr/ratingBarStyleSmall"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" 
    />

2
उपरोक्त कोड देते समय रेटिंग बार क्लिक करने योग्य नहीं है।
शरथ

16

इसे लागू करें।

<RatingBar android:id="@+id/indicator_ratingbar"
    style="?android:attr/ratingBarStyleIndicator"
    android:layout_marginLeft="5dip"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_vertical" />

1
हालांकि नेत्रहीन यह महान है। इस समाधान पर काम न करने वाली घटनाओं पर क्लिक करें। क्या आपके पास इसके लिए कोई फिक्स है?
गोखन बारिस अकर

4
अगर आप क्लिक्स का उपयोग कर काम करना चाहते हैं तो android:
isIndicator

15

मुझे लगता है कि मैंने ऊपर वाले के द्वारा दिया गया एक आसान समाधान ढूंढ लिया और अपना खुद का रोल करने की तुलना में आसान है। मैंने बस एक छोटा सा रेटिंग बार बनाया है, फिर उसमें एक ऑन-लाइनलिंटर जोड़ा। वहां से मैं क्लिक की चौड़ाई की गणना करता हूं और उसी से तारों की संख्या निर्धारित करता हूं। इसे कई बार इस्तेमाल करने के बाद, केवल एक ही quirk मैंने पाया है कि एक छोटी रेटिंग बार का ड्राइंग हमेशा एक तालिका में सही नहीं निकलता है जब तक कि मैं इसे LinearLayout में संलग्न नहीं करता (संपादक में सही दिखता है, लेकिन डिवाइस नहीं) । वैसे भी, मेरे लेआउट में:

            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" >
                <RatingBar
                    android:id="@+id/myRatingBar"
                    style="?android:attr/ratingBarStyleSmall"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:numStars="5" />
            </LinearLayout>

और मेरी गतिविधि के भीतर:

    final RatingBar minimumRating = (RatingBar)findViewById(R.id.myRatingBar);
    minimumRating.setOnTouchListener(new OnTouchListener()
    { 
        public boolean onTouch(View view, MotionEvent event)
        { 
            float touchPositionX = event.getX();
            float width = minimumRating.getWidth();
            float starsf = (touchPositionX / width) * 5.0f;
            int stars = (int)starsf + 1;
            minimumRating.setRating(stars);
            return true; 
        } 
    });

मैं उम्मीद करता हूं कि इससे किसी की मदद होगी। निश्चित रूप से अपने आप को खींचने की तुलना में आसान है (हालांकि मैंने पाया है कि यह भी काम करता है, लेकिन मैं सिर्फ सितारों का एक आसान उपयोग करना चाहता था)।


यह काम करता है, और यह आसान है ... लेकिन ratingBarStyleSmallउपयोगी होने के लिए सितारे वास्तव में बहुत छोटे हैं। मुझे लगता है कि मुझे उन सितारों को पाने के लिए खुद को रोल करना होगा जो एक मध्यवर्ती आकार हैं।
बीयर मी

5
<RatingBar
    android:id="@+id/rating_bar"
    style="@style/Widget.AppCompat.RatingBar.Small"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

5
 <RatingBar
                    android:rating="3.5"
                    android:stepSize="0.5"
                    android:numStars="5"
                    style = "?android:attr/ratingBarStyleSmall"
                    android:theme="@style/RatingBar"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"/>

// if you want to style 

 <style name="RatingBar" parent="Theme.AppCompat">
        <item name="colorControlNormal">@color/colorPrimary</item>
        <item name="colorControlActivated">@color/colorAccent</item>
    </style>

// छोटे रेटिंग बार के लिए इन लाइन को जोड़ें

style = "?android:attr/ratingBarStyleSmall"

हालांकि यह कोड स्निपेट समाधान हो सकता है, जिसमें स्पष्टीकरण भी शामिल है , जो आपके पोस्ट की गुणवत्ता को बेहतर बनाने में मदद करता है। याद रखें कि आप भविष्य में पाठकों के लिए प्रश्न का उत्तर दे रहे हैं, और उन लोगों को आपके कोड सुझाव के कारणों का पता नहीं चल सकता है।
जोहान

3

हालांकि सैमसंग उपकरणों के लिए Farry के कार्यों का उत्तर, रेटिंगबार ने मेरे द्वारा परिभाषित के बजाय यादृच्छिक नीला रंग लिया। इसलिए उपयोग करें

style="?attr/ratingBarStyleSmall"

बजाय।

पूर्ण कोड का उपयोग कैसे करें:

<android.support.v7.widget.AppCompatRatingBar
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                style="?attr/ratingBarStyleSmall" // use smaller version of icons
                android:theme="@style/RatingBar"
                android:rating="0"
                tools:rating="5"/>

<style name="RatingBar" parent="Theme.AppCompat">
        <item name="colorControlNormal">@color/grey</item>
        <item name="colorControlActivated">@color/yellow</item>
        <item name="android:numStars">5</item>
        <item name="android:stepSize">1</item>
    </style>

3

छोटे रेटिंगबार के लिए सर्वश्रेष्ठ उत्तर

<RatingBar
                    android:layout_width="wrap_content"
                    style = "?android:attr/ratingBarStyleSmall"
                    android:layout_height="wrap_content" />

2

इस कोड का उपयोग करें

<RatingBar
    android:id="@+id/ratingBarSmalloverall"
    style="?android:attr/ratingBarStyleSmall"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_centerVertical="true"
    android:layout_marginRight="30dp"
    android:isIndicator="false"
    android:numStars="5" />

2
<RatingBar
    android:id="@+id/ratingBar1"
    android:numStars="5"
    android:stepSize=".5"
    android:rating="3.5"
    style="@android:style/Widget.DeviceDefault.RatingBar.Small"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

2

सबसे अच्छा जवाब मुझे मिला

  <style name="MyRatingBar" parent="@android:style/Widget.RatingBar">
    <item name="android:minHeight">15dp</item>
    <item name="android:maxHeight">15dp</item>
    <item name="colorControlNormal">@color/white</item>
    <item name="colorControlActivated">@color/home_add</item>
</style>

उपयोगकर्ता इस तरह

<RatingBar
                style="?android:attr/ratingBarStyleIndicator"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:isIndicator="false"
                android:max="5"
                android:rating="3"
                android:scaleX=".8"
                android:scaleY=".8"
                android:theme="@style/MyRatingBar" />

वृद्धि / का उपयोग करके आकार घटाएँ scaleX और scaleY मूल्य


1

ऑनटच इवेंट के साथ छोटे रेटिंग बार के लिए निम्न कोड का उपयोग करें

enter code here


<RatingBar
            android:id="@+id/ratingBar"
            style="?android:ratingBarStyleSmall"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:isIndicator="false"
            android:rating="4"
            android:stepSize="0.5" />

0

बहुत सारे शोध के बाद मुझे कस्टम रेटिंग सलाखों के आकार को कम करने का सबसे अच्छा समाधान मिला, जो कि नीचे वर्णित कुछ आकारों में प्रगति के आकार को प्राप्त करने के लिए है:

xxhdpi - 48 * 48 px

xhdpi - 36 * 36 पीएक्स

एचडीपीआई - 24 * 24 पीएक्स

और स्टाइल में सभी रिज़ॉल्यूशन के लिए न्यूनतम और अधिकतम 16 डीपी के रूप में रखा गया है।

मुझे बताएं कि क्या इससे आपको सबसे छोटे आकार की रेटिंग पट्टियाँ प्राप्त करने में मदद नहीं मिलती है क्योंकि इन आकारों को मैंने रेटिंगबार.स्मार्ट स्टाइल की विशेषता के अनुरूप और संगत पाया है।


0

रेटिंग बार xml स्टाइल में मेरे लिए इसका कार्य = "? Android: attr / RatingBarStyleSmall" यह जोड़ें। यह काम करेगा।


-4

मैं इस समस्या को निम्न हल करता हूं: स्टाइल = "? एंड्रॉइड: एटर / रेटिंगबार्टलस्मॉल"


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