theme studio google example apptheme android android-layout android-5.0-lollipop material-design android-theme

android - studio - Lollipop Progress Bar Tinting



styles.xml android (4)

Estoy en un dispositivo Lollipop (MotoG 2014), leí sobre el teñido de la barra de progreso, pero esto no funciona ... Obtengo el color predeterminado de la barra de progreso. ¿Que me estoy perdiendo aqui?

<ProgressBar style="?android:attr/progressBarStyleLarge" android:layout_width="50dp" android:layout_height="50dp" android:backgroundTintMode="src_in" android:indeterminate="true" android:indeterminateTint="#f00" />

Muchas gracias.


Intenta cambiar tu ProgressBar de ProgressBar a esto

<ProgressBar android:id="@+id/view_progress" style="?android:attr/progressBarStyleLarge" android:layout_width="50dp" android:layout_height="50dp" android:indeterminate="true" android:indeterminateTintMode="src_in" android:indeterminateTint="@color/red" />

También puedes hacerlo programáticamente haciendo esto:

ProgressBar progressBar; progressBar = (ProgressBar)findViewById(R.id.view_progress); progressBar.getProgressDrawable().setColorFilter(Color.RED, Mode.SRC_IN);

Referencias

Configuración en color ProgressBar Tint


La solución aceptada no funcionaba para mí en Pre-Lollipop, pero encontré que esta solución se adapta a todas las API y además de eso, no usa ningún código en desuso:

// fixes pre-Lollipop progressBar indeterminateDrawable tinting if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { Drawable wrapDrawable = DrawableCompat.wrap(mProgressBar.getIndeterminateDrawable()); DrawableCompat.setTint(wrapDrawable, ContextCompat.getColor(getContext(), android.R.color.holo_green_light)); mProgressBar.setIndeterminateDrawable(DrawableCompat.unwrap(wrapDrawable)); } else { mProgressBar.getIndeterminateDrawable().setColorFilter(ContextCompat.getColor(getContext(), android.R.color.holo_green_light), PorterDuff.Mode.SRC_IN); }

¡Feliz codificación!


Para evitar que también se tiñe el fondo de la LayerDrawable ProgressBar , debería obtener una referencia al mapa de bits exacto del ProgressBar LayerDrawable interno. Esta es una forma pirata de hacerlo, pero funciona.

LayerDrawable layerDrawable = (LayerDrawable) progressBar.getProgressDrawable(); Drawable drawable = layerDrawable.getDrawable(2); // The progress bitmap drawable.setColorFilter(color, PorterDuff.Mode.SRC_IN);


/**change your progress drawable asrequired****/ Drawable wrapDrawable = DrawableCompat.wrap(_progress.getIndeterminateDrawable()); DrawableCompat.setTint(wrapDrawable, ContextCompat.getColor(this, R.color.colorOrange)); _progress.setIndeterminateDrawable(DrawableCompat.unwrap(wrapDrawable));