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