wake-up-neo.com

Wie erstelle ich eine kleinere RatingBar?

Ich habe eine RatingBar in einem Layout hinzugefügt:

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

Der Standardstil für die Bewertungsleiste ist jedoch zu groß.
Ich habe versucht, es durch Hinzufügen des Android-Stils zu ändern: style="?android:attr/ratingBarStyleSmall"

Das Ergebnis ist jedoch zu klein und es ist unmöglich, mit dieser Eigenschaft einen Preis festzulegen.

Wie könnte ich tun

123
Clem

Das standardmäßige RatingBar-Widget ist sortiert.

Die Quelle verweist auf den Stil "?android:attr/ratingBarStyleIndicator" zusätzlich zu dem "?android:attr/ratingBarStyleSmall", mit dem Sie bereits vertraut sind. ratingBarStyleIndicator ist etwas kleiner, aber immer noch ziemlich hässlich. In den Kommentaren wird darauf hingewiesen, dass diese Stile "keine Interaktion unterstützen".

Du bist wahrscheinlich besser dran, deine eigenen zu rollen. Unter http://kozyr.zydako.net/2010/05/23/pretty-ratingbar/ finden Sie einen ansehnlich aussehenden Leitfaden, der zeigt, wie das geht. (Ich habe es noch nicht selbst gemacht, werde es aber an einem Tag versuchen oder so.)

Viel Glück!

p.s. Es tut uns leid, ich wollte einen Link zu der Quelle posten, in dem Sie herumschauen können, aber ich bin ein neuer Benutzer und kann nicht mehr als eine URL veröffentlichen. Wenn Sie sich durch den Quelltextbaum bewegen, finden Sie ihn unter frameworks/base/core/Java/Android/widget/RatingBar.Java

102
Farray

Wie man den angegebenen Code hier ... klebt.

Schritt 1. Sie benötigen Ihre eigenen Bewertungssterne in res/drawable ...

A full star

Empty star

Schritt-2 In res/drawable benötigen Sie ratingstars.xml wie folgt ...

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

Schritt-3 In res/values benötigen Sie styles.xml wie folgt ...

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

Schritt-4 In Ihrem Layout ...

<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"    
/>  
193
Vaibhav Jani

Benutz einfach:

Android:scaleX="0.5"
Android:scaleY="0.5"

Ändern Sie den Skalierungsfaktor entsprechend Ihren Bedürfnissen.

Um zu skalieren, ohne links eine Auffüllung zu erstellen, fügen Sie hinzu

Android:transformPivotX="0dp"
66
Loolooii

Es ist nicht erforderlich, dem ?android:attr/ratingBarStyleSmall einen Listener hinzuzufügen. Fügen Sie einfach Android:isIndicator=false hinzu, und es werden Klickereignisse erfasst, z.

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

das kleine von dem Betriebssystem umsetzen

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

Ich habe eine einfachere Lösung gefunden, als ich von den oben genannten befürwortet habe und leichter ist, als Ihre eigene zu rollen. Ich habe einfach eine kleine Bewertungsleiste erstellt und dann einen onTouchListener hinzugefügt. Von dort aus berechne ich die Breite des Klicks und bestimme daraus die Anzahl der Sterne. Nachdem ich dies mehrmals verwendet habe, ist die einzige Besonderheit, die ich gefunden habe, dass das Zeichnen einer kleinen Bewertungsleiste in einer Tabelle nicht immer richtig ist, wenn ich sie nicht in ein LinearLayout einhülle. . Jedenfalls in meinem Layout:

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

und innerhalb meiner Tätigkeit:

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

Ich hoffe das hilft jemand anderem. Auf jeden Fall einfacher als eigene zu zeichnen (obwohl ich das auch gefunden habe, aber ich wollte einfach Sterne verwenden).

15
user1676075

wende das an.

<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" />
14
Azhar Shaikh
<RatingBar
    Android:id="@+id/rating_bar"
    style="@style/Widget.AppCompat.RatingBar.Small"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content" />
5
chry

Die beste Antwort für eine kleine Bewertungsleiste

<RatingBar
                    Android:layout_width="wrap_content"
                    style = "?android:attr/ratingBarStyleSmall"
                    Android:layout_height="wrap_content" />
2
Arun Prajapati

Diesen Code verwenden

<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
M D P

obwohl die Antwort von Farry funktioniert, hat RatingBar für Samsung-Geräte eine zufällige blaue Farbe anstelle der von mir definierten verwendet. Also verwenden

style="?attr/ratingBarStyleSmall"

stattdessen.

Vollständiger Code zur Verwendung:

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

verwenden Sie den folgenden Code für eine kleine Bewertungsleiste mit dem onTouch-Ereignis

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

Nach langem Nachforschen fand ich die beste Lösung, um die Größe von benutzerdefinierten Bewertungsstäben zu reduzieren, indem die Fortschrittgröße in bestimmten Größen, wie unten erwähnt, gezeichnet werden kann:

xxhdpi - 48 * 48 px

xhdpi - 36 * 36 px

hdpi - 24 * 24 px

Und in Stil setzen Sie die Minthight und Maxightight als 16 dp für alle Auflösung.

Lassen Sie mich wissen, ob dies Ihnen nicht dabei hilft, die besten kleinen Bewertungsbalken zu erhalten, da diese Größen sehr kompatibel und äquivalent zum ratingbar.small-Stilattribut sind. 

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

// Diese Zeile für eine kleine Bewertungsleiste hinzufügen

style = "?android:attr/ratingBarStyleSmall"
0
indrajeet jyoti

Es funktioniert für mich in Bewertungsleiste xml style = "android: attr/ratingBarStyleSmall" add this.it wird funktionieren.

0
S HemaNandhini

Die beste Antwort, die ich bekommen habe 

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

benutzer gefällt das

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

Vergrößern/Verkleinern Sie die Größen mit scaleX und scaleY

0
AMAN SINGH