2015-11-10 8 views
16

Ich arbeite mit FloatingActionButton. Der Benutzer sollte in der Lage sein, die FAB-Hintergrundfarbe innerhalb eines onClick Ereignisses zu wechseln.Android setBackgroundTintList auf Pre-Lollipop-Geräte

Der empfohlene Aufruf an setBackgroundTintList scheint jedoch nur kompatibel von 21+ API zu sein.

Wie gehe ich - richtig - auf Pre-Lollipop-Geräten? Gibt es eine Alternative, die ich verwenden könnte?

Vielen Dank im Voraus.

+1

Versuchen Sie dies [Antwort] (http://stackoverflow.com/a/30313299/4385913) –

+0

@Skizo Danke! Dieser Aufruf von ViewCompat war nicht bekannt (weder setSupportBackgroundTintList). Bitte schreibe deine eigene Antwort, damit ich sie als akzeptiert markieren kann! – Matteo

+0

Erledigt Matteo: D ... –

Antwort

25

Sie können auch setSupportBackgroundTintList

Wendet einen Farbton auf dem Hintergrund ziehbar verwenden. Ändert nicht den aktuellen Farbtonmodus, der standardmäßig SRC_IN ist.

Nachfolgende Aufrufe von View.setBackground (Drawable) werden automatisch das Zeichen ändern und den angegebenen Farbton- und Farbtonmodus anwenden.

Werfen Sie auch einen Blick auf ViewCompat.setBackgroundTintList()

Wendet einen Farbton auf dem Hintergrund ziehbar.

Dies wird immer wirksam, wenn auf API v21 oder neuer ausgeführt wird. Wenn es auf Plattformen vor API v21 ausgeführt wird, wird es nur wirksam, wenn View die Schnittstelle TintableBackgroundView implementiert.

fand ich eine Lösung here on SO, die ich verwendet habe, bevor und das ist: zu

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

Es funktioniert für mich Ich hoffe, dass es für Sie arbeitet.

+0

Perfekt! Genau wonach ich gesucht habe! Vielen Dank – Matteo

+0

Danke upvote und markieren Sie es als eine richtige Antwort, wenn es das war, was Sie brauchen: P Froh, das zu hören. –

+1

Aber FloatingActionButton nicht TintableBackgroundView implementieren, so dass der ViewCompat.setBackgroundTintList() für API funktioniert nicht <21 – lage

6

einfach:

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

fab ist Ihr FloatingActionButton natürlich und 0xFF4CAF50 nur ein Beispiel Farbe

+0

Ich denke, du hast nicht verstanden, was ich meinte. Überprüfen Sie @Skizo zur weiteren Klärung. Danke dir übrigens! :) – Matteo

+0

ist so rückwärtskompatibel –

+1

@Matteo FAB-Implementierung kommt von Support-Bibliothek und es unterstützt Abwärtskompatibilität. Unterhalb von 'setBackgroundTintList()' werden verschiedene Impls für Pre-Lolipop verwendet. Bewährt auf KitKat Gerät. –

0

Wie Kamil Seweryn in den Kommentaren sagte, kann ich bestätigen, dass fab.setBackgroundTintList() auf Instanz von android.support.design.widget.FloatingActionButton arbeitet.

Ich habe auf Samsung Galaxy S5 (Android 6) und Samsung Galaxy S3 (Android 4.3) getestet. Beide funktionieren korrekt.