Daha küçük RatingBar nasıl yapılır?


134

Bir düzende RatingBar ekledim :

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

Ancak, derecelendirme çubuğu için varsayılan stil çok büyük.
Android stilini ekleyerek değiştirmeye çalıştım:style="?android:attr/ratingBarStyleSmall"

Ancak sonuç çok küçük ve bu mülkle bir oran belirlemek imkansız.

Nasıl yapabilirim?

Yanıtlar:


106

Varsayılan RatingBar widget'ı sorta 'topal.

Kaynak, zaten aşina olduğunuz ?android:attr/ratingBarStyleIndicator" ?android:attr/ratingBarStyleSmall" karakterine ek olarak " " stiline atıfta bulunur . ratingBarStyleIndicatorbiraz daha küçük ama yine de oldukça çirkin ve yorumlar bu tarzların "etkileşimi desteklemediğini" belirtiyor.

Muhtemelen kendi yuvarlanmanız daha iyi. Http://kozyr.zydako.net/2010/05/23/pretty-ratingbar/ adresinde bunun nasıl yapılacağını gösteren iyi görünümlü bir rehber var . (Henüz kendim yapmadım, ama bir gün içinde denemeye çalışacağım.)

İyi şanslar!

ps Maalesef, içeri girmeniz için kaynağa bir bağlantı gönderecekti, ancak yeni bir kullanıcıyım ve 1'den fazla URL gönderemiyorum. Kaynak ağaçta yolunuzu kazarsanız, bu çerçeveler / base / core / java / android / widget / RatingBar.java'da bulunur


Bu kullanım çok daha iyidir android: özn / ratingBarStyleSmall ve set global derecelendirme tema ama tam olarak tema adını, çok teşekkür ederim kullanmayın;)?
Tsung Goh

7
Eğer gösterge özelliğini android ayarlarsak : isIndicator = "false" onunla etkileşime gireceğinden daha fazla ..
Mayur R. Amipara

Docs ratingBarStyleSmall iki küçüktür ima. Bence yorumun geri döndü.
AdamMc331

5
Bağlantı koptu.
Denny

@Denny İçeriği Google Cache'den edinilebilir . Yıllardır Android derecelendirme çubuklarına bakmadığım için içeriği içerikle güncellemiyorum ve bu bağlantıdaki içeriğin hala geçerli olup olmadığından emin değilim.
Farray

195

Burada verilen kod nasıl yapıştırılır ...

Aşama 1. Eğer kendi derecelendirme yıldız gerekir res/drawable...

Tam bir yıldız

Boş yıldız

Adım-2 res/drawableİhtiyacınız ratingstars.xmlolan aşağıdaki gibi ...

<?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>

Adım-3 res/valuesİhtiyacınız styles.xmlolan aşağıdaki gibi ...

<?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>

Adım-4 Düzeninizde ...

<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
Şunu söylememeliyim: <item android: id = "@ + android: id / ikincilProgress" android: drawable = "@ drawable / star_empty" /> "@ drawable / star_half" /> ya da ne dediyseniz?
StackOverflow

8
Çok teşekkürler. Ancak, sadece küçük bir yorum: yarım yıldız görüntüsüne ihtiyacınız yok. İlerlemeye göre otomatik olarak oluşturulacaktır.
Boris Strandjev

1
@Vlad Bunu nereden aldığımdan bahsettiğim ilk cevap satırını okuyun.
Vaibhav Jani

4
mükemmel çalışıyor :) ama ben 2 sorunları var .. numStars artık çalışmıyor ve ben max ve min genişliği ayarlasam bile biraz daha büyük elde edemezsiniz
Ahmad Dwaik 'Warlock'

1
Teşekkürler @PiedPiper - Bu bana çok zaman kazandırdı !! Şimdiye kadarki en iyi açıklama!
Edmond Tamas

70

Sadece kullan:

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

Ölçek faktörünü ihtiyacınıza göre değiştirin.

Solda dolgu oluşturmadan ölçeklendirmek için

android:transformPivotX="0dp"

scaleX scaleY iyidir ama çirkin dolgu bırakın, eğer bu
dolgudan kurtulabilirseniz

Ayrıca, Android 3.0 / API 11 gerektirir
averasko

6
Ben çirkin (sağda) dolgu ile çözmek codeandroid:scaleX="0.75" android:scaleY="0.75" android:layout_marginRight="-25dp"
hannes ach

1
Bu en kolay çözüm gibi görünse de, benim için işe yaramadı. Nedense hiçbir etkisi olmadı. Android 5.x'te olduğum için mi?
Nautilus

değerlendirme çubuğunun yüksekliğini belirterek bazı ekstra dolguları kaldırabilirsiniz:android:layout_height="40dp"
Manohar Reddy

43

'A dinleyici eklemenize gerek yoktur ?android:attr/ratingBarStyleSmall. Sadece ekleyin android:isIndicator=falseve tıklama etkinliklerini yakalar, ör.

<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
Gösterge anahtarıdır!
deadfish

19

küçük olan OS tarafından uygulanır

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

2
Yukarıdaki kod verilirken derecelendirme çubuğu tıklanamaz.
Sharath

16

bunu uygulayın.

<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
Görsel olarak harika olmasına rağmen. bu çözüm üzerinde çalışmayan tıklama etkinliklerini tıklayın. bunun için bir çözümün var mı?
Gökhan Barış Aker

4
tıklama çalışma istiyorsanız android kullanın: isIndicator = "false"
D4rWiNS

15

Yukarıdakilerin verdiğini düşündüğümden daha kolay bir çözüm buldum ve kendinizinkinden daha kolay bir çözüm buldum. Basitçe küçük bir derecelendirme çubuğu oluşturdum, sonra ona bir onTouchListener ekledim. Oradan tıklamanın genişliğini hesaplarım ve bundan yıldız sayısını belirlerim. Bunu birkaç kez kullandıktan sonra, bulduğum tek tuhaf, küçük bir derecelendirme çubuğunun çiziminin, bir LinearLayout içine yerleştirmedikçe her zaman bir tabloda sağa dönmediği (editöre doğru görünüyor, ancak cihaza değil) . Her neyse, düzenimde:

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

ve faaliyetlerim dahilinde:

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

Umarım bunun bir başkasına yardımı olur. Kesinlikle kendi çizmek daha kolay (Ben de işe yarıyor buldum, ama ben sadece yıldızların kolay kullanımı istedim).


İşe yarıyor ve çok kolay ... ama ratingBarStyleSmallyıldızlar kullanışlı olamayacak kadar küçük. Bence orta büyüklükte yıldızları elde etmek için kendimi yuvarlamam gerekecek.
Beer Me

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>

// bu satırı küçük derecelendirme çubuğu için ekle

style = "?android:attr/ratingBarStyleSmall"

Bu kod snippet'i çözüm olsa da, bir açıklama da dahil olmak üzere mesajınızın kalitesini artırmaya yardımcı olur. Gelecekte okuyucular için soruyu cevapladığınızı ve bu kişilerin kod önerinizin nedenlerini bilmeyebileceğini unutmayın.
Johan

3

Farry'nin cevabı işe yarıyor olsa da, Samsung cihazlar için RatingBar benim tanımladığım yerine rastgele mavi renk aldı. Öyleyse kullan

style="?attr/ratingBarStyleSmall"

yerine.

Tam kod nasıl kullanılır:

<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

Küçük derecelendirme çubuğu için en iyi cevap

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

2

Bu Kodu Kullan

<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

Aldığım en iyi cevap

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

böyle kullanıcı

<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 ve scaleY değerini kullanarak boyutları büyütün / küçültün


1

onTouch olayı olan küçük derecelendirme çubuğu için aşağıdaki kodu kullanın

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

Bir çok araştırmadan sonra, özel derecelendirme çubuklarının boyutunu azaltmak için en iyi çözümü buldum, aşağıda belirtildiği gibi belirli boyutlarda kaydedilebilir ilerleme boyutunu elde etmektir:

xxhdpi - 48 * 48 piksel

xhdpi - 36 * 36 piksel

hdpi - 24 * 24 piksel

Ve stil olarak tüm çözünürlük için minheight ve maxheight'ı 16 dp olarak koyun.

Bu boyutlar çok uyumlu ve ratingbar.small stil özelliğine eşdeğer bulduğum için en iyi küçük boyutlu derecelendirme çubuklarını elde etmenize yardımcı olmazsa bize bildirin.


0

Onun için derecelendirme çubuğunda benim için çalışıyor xml style = "? Android: attr / ratingBarStyleSmall" ekleyin this.it çalışacaktır.


-4

Bu sorunu şu şekilde çözdüm: style = "? Android: attr / ratingBarStyleSmall"


OP zaten denedi ve diğer cevaplar zaten bahsetti.
Pang
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.