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
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
Wie man den angegebenen Code hier ... klebt.
Schritt 1. Sie benötigen Ihre eigenen Bewertungssterne in res/drawable
...
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"
/>
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"
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" />
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"
/>
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).
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" />
<RatingBar
Android:id="@+id/rating_bar"
style="@style/Widget.AppCompat.RatingBar.Small"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content" />
Die beste Antwort für eine kleine Bewertungsleiste
<RatingBar
Android:layout_width="wrap_content"
style = "?android:attr/ratingBarStyleSmall"
Android:layout_height="wrap_content" />
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" />
<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" />
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>
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" />
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.
<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"
Es funktioniert für mich in Bewertungsleiste xml style = "android: attr/ratingBarStyleSmall" add this.it wird funktionieren.
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