web-dev-qa-db-fra.com

Lollipop Progress Bar Teintant

Je suis sur un appareil Lollipop (MotoG 2014), j'ai lu des informations sur la coloration de la barre de progression, mais cela ne fonctionne pas ... J'ai la couleur de la barre de progression par défaut. Qu'est-ce que j'oublie ici?

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

Merci beaucoup.

21
Jumpa

La solution acceptée ne fonctionnait pas pour moi avant Lollipop, mais j'ai trouvé cette solution compatible avec toutes les API. De plus, elle n'utilise pas de code obsolète:

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

Bonne codage!

32
Henrique de Sousa

Essayez de changer votre ProgressBar en ceci

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

Aussi, vous pouvez le faire par programme en procédant comme suit:

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

Références

Mise en coursBar Couleur de teinte

57
Skizo-ozᴉʞS

Pour éviter de teinter également l'arrière-plan ProgressBar, vous devez obtenir une référence au bitmap exact à partir de la variable intérieure ProgressBarLayerDrawable. C’est une façon détournée de le faire, mais cela fonctionne.

LayerDrawable layerDrawable = (LayerDrawable) progressBar.getProgressDrawable();
Drawable drawable = layerDrawable.getDrawable(2); // The progress bitmap
drawable.setColorFilter(color, PorterDuff.Mode.SRC_IN);
2
Miltos
/**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));
0
DeepakPanwar