ropa - Android: cambia el color de la barra de calificación a dorado
programa para cambiar el color de una imagen online (8)
Quiero cambiar el color de la barra de calificación a dorado.
No quiero personalizar las estrellas, solo quiero cambiar el color para API 16 o superior
He intentado las siguientes soluciones, pero ninguna de ellas funcionó para mí.
1.
RatingBar ratingBar = (RatingBar) findViewById(R.id.ratingBar);
LayerDrawable stars = (LayerDrawable) ratingBar.getProgressDrawable();
stars.getDrawable(2).setColorFilter(Color.YELLOW, PorterDuff.Mode.SRC_ATOP);
2.
android:progressDrawable="@color/golden" in XML
Como mencionaste, quieres cambiar el color de la estrella sin usar el dibujo. Puedes hacerlo por unas pocas líneas de código como abajo.
RatingBar ratingBar = (RatingBar) findViewById(R.id.ratingBar);
Drawable drawable = ratingBar.getProgressDrawable();
drawable.setColorFilter(Color.parseColor("#0064A8"),PorterDuff.Mode.SRC_ATOP);
Esta opción ahora está incluida en la biblioteca AppCompat. La versión AppCompat de RatingBar se utiliza automáticamente.
http://developer.android.com/reference/android/support/v7/widget/AppCompatRatingBar.html
Ejemplo (desde mi propia aplicación):
<RatingBar
android:id="@+id/rating"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:numStars="5"
android:stepSize="1"
android:theme="@style/RatingBar"/>
Con tema:
<style name="RatingBar" parent="Theme.AppCompat">
<item name="colorControlNormal">@color/duskYellow</item>
<item name="colorControlActivated">@color/lightGrey</item>
</style>
Mi caso de uso fue mostrar diferentes colores para diferentes clasificaciones. Por ejemplo :
1- Rojo
2- naranja
3- Amarillo
4- Verde claro
5- verde oscuro
Solución:
ratingBar.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() {
@Override
public void onRatingChanged(final RatingBar ratingBar, final float rating, final boolean fromUser) {
setCurrentRating(rating);
}
});
Luego en tu método setCurrentRating()
:
private void setCurrentRating(float rating) {
LayerDrawable drawable = (LayerDrawable)rateOverall.getProgressDrawable();
if(mContext!=null) {
switch (Math.round(rating)) {
case 1:
setRatingStarColor(drawable.getDrawable(2), ContextCompat.getColor(mContext, R.color.dark_red));
break;
case 2:
setRatingStarColor(drawable.getDrawable(2), ContextCompat.getColor(mContext, R.color.light_orange));
break;
case 3:
setRatingStarColor(drawable.getDrawable(2), ContextCompat.getColor(mContext, R.color.light_yellow));
break;
case 4:
setRatingStarColor(drawable.getDrawable(2), ContextCompat.getColor(mContext, R.color.light_green_review));
break;
case 5:
setRatingStarColor(drawable.getDrawable(2), ContextCompat.getColor(mContext, R.color.dark_green));
break;
}
setRatingStarColor(drawable.getDrawable(1), ContextCompat.getColor(mContext, R.color.transparent));
setRatingStarColor(drawable.getDrawable(0), ContextCompat.getColor(mContext, R.color.light_grey_payment));
}
}
Luego en tu método setRatingStarColor()
:
private void setRatingStarColor(Drawable drawable, @ColorInt int color)
{
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
{
DrawableCompat.setTint(drawable, color);
}
else
{
drawable.setColorFilter(color, PorterDuff.Mode.SRC_IN);
}
}
Gracias a esta answer que me ayudó a resolver esto. Espero que ayude a alguien!
Mi tarea fue cambiar el color de la barra de clasificación al color primario de la aplicación para Android > = 14 SDK . He resuelto este problema en código y en archivo xml.
mRatingBar = (RatingBar)view.findViewById(R.id.ratingBar);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
try {
Drawable progressDrawable = mRatingBar.getProgressDrawable();
if (progressDrawable != null) {
DrawableCompat.setTint(progressDrawable, ContextCompat.getColor(getContext(), R.color.colorPrimary));
}
} catch (Exception e) {
e.printStackTrace();
}
}
Y en archivo xml
<RatingBar
android:id="@+id/ratingBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:backgroundTint="@color/colorPrimary"
android:numStars="5"
android:progressTint="@color/colorPrimary"
android:rating="0"
android:secondaryProgressTint="@android:color/transparent"
android:stepSize="1" />
Simplemente agregue esta línea a xml (API 21 y superior)
android:progressTint="@color/color"
Solución simple, use AppCompatRatingBar y use el siguiente código
ratingbar.setProgressTintList(ColorStateList.valueOf(ContextCompat.getColor(context, R.color.colorAccent)));
prueba esto,
Necesitas imágenes de 3 estrellas (red_star_full.png, red_star_half.png y red_star_empty.png) y un archivo xml. Si quieres una estrella dorada, usa la imagen de una estrella dorada. esto es para la estrella roja.
puede poner ratingbar_color.xml en res / drawable.
<?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/red_star_empty" />
<item android:id="@android:id/secondaryProgress" android:drawable="@drawable/red_star_half" />
<item android:id="@android:id/progress" android:drawable="@drawable/red_star_full" />
</layer-list>
y en la definición de la barra de calificación uso siguiente.
<RatingBar android:progressDrawable="@drawable/ratingbar_red/>
RatingBar ratingreview;
ratingreview=(RatingBar)v.findViewById(R.id.ratingreview);
ratingreview.setRating(Float.parseFloat(objrating));
Drawable drawable = ratingreview.getProgressDrawable();
drawable.setColorFilter(Color.parseColor("#6A9A28"), PorterDuff.Mode.SRC_ATOP);