web-dev-qa-db-fra.com

Android setBackgroundTintList sur les appareils pré-Lollipop

Je travaille avec FloatingActionButton. L'utilisateur devrait pouvoir changer la couleur d'arrière-plan FAB dans un événement onClick.

Cependant, l'appel recommandé à setBackgroundTintList ne semble être compatible qu'à partir de 21+ API.

Comment puis-je - correctement - m'y prendre sur les appareils pré-Lollipop? Y a-t-il une alternative que je pourrais utiliser?

Merci d'avance.

16
Matteo

Vous pouvez aussi utiliser setSupportBackgroundTintList

Applique une teinte à l'arrière-plan pouvant être dessiné. Ne modifie pas le mode de teinte actuel, qui est SRC_IN par défaut.

Les appels suivants à View.setBackground (Drawable) modifieront automatiquement le dessin et appliqueront la teinte et le mode de teinte spécifiés.

Regardez aussi sur ViewCompat.setBackgroundTintList()

Applique une teinte à l'arrière-plan pouvant être dessiné.

Cela prendra toujours effet lors de l'exécution sur API v21 ou plus récente. Lors de l'exécution sur des plates-formes antérieures à API v21, cela ne prendra effet que si view implémente l'interface TintableBackgroundView.

J'ai trouvé une solution ici sur SO que j'ai déjà utilisée et qui est la suivante: 

public static void setButtonTint(Button button, ColorStateList tint) {
  if (Build.VERSION.SDK_INT == Build.VERSION_CODES.Lollipop && button instanceof AppCompatButton) {
      ((AppCompatButton) button).setSupportBackgroundTintList(tint);
  } else {
      ViewCompat.setBackgroundTintList(button, tint);
  }
}

Cela fonctionne pour moi, j'espère que cela fonctionne pour vous aussi.

29
Skizo-ozᴉʞS

simple:

fab.setBackgroundTintList(ColorStateList.valueOf(0xFF4CAF50));

fab est votre FloatingActionButton bien sûr et 0xFF4CAF50 juste un exemple de couleur

7
Rüdiger

Comme Kamil Seweryn l’a dit dans des commentaires, je peux confirmer que fab.setBackgroundTintList() fonctionne sur l’instance de Android.support.design.widget.FloatingActionButton.

J'ai testé sur Samsung Galaxy S5 (Android 6) et Samsung Galaxy S3 (Android 4.3). Les deux fonctionnent correctement.

0
Zakharov Roman

À partir de XML, vous pouvez utiliser

card_view:backgroundTint="@color/your_color"

card_view est xmlns:card_view="http://schemas.Android.com/apk/res-auto"

0
KishanSolanki124