2015-04-27 10 views
13

Ich möchte Welleneffekte auf Schaltflächen verwenden. AppCompat v22.1 hat AppCompatButton und neue Funktionen für AppCompat-Tönung hinzugefügt.AppCompatButton backgroundTint API <21

Mein Layout:

<android.support.v7.widget.AppCompatButton 
     android:id="@+id/add_remove_button" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:backgroundTint="@color/primary" 
     android:textColor="@android:color/white" 
     android:text="Remove" /> 

Auf meinem API 22 Testgerät die sich allmählich ausbreitende Wirkung funktioniert perfekt, aber ich bin Codierung für 11 API und leider muss backgroundTint API> = 21. Wie kann ich die Ripple-Effekt eingestellt zu Schaltflächen auf älteren API-Versionen?

+0

Mai http://stackoverflow.com/questions/26444391/primary-dark-color-android-under-api-21 sein Sie hier beantworten kann. – Hardy

+0

Ripples funktionieren nicht auf der Vor-Lollipop-Box, daher musst du sie emulieren. – Egor

+0

Ripple funktioniert nur für api> = 21 –

Antwort

54

Verwenden Sie einfach app:backgroundTint statt android:backgroundTint wird die Tönung Wirkung unter Lollipop nehmen. Der Grund dafür ist AppCompatActivityAppCompatDelegateImplV7 Verwenden Sie AppCompatViewInflater, um Button oder TextView automatisch in AppCompatButton oder AppCompatTextView zu ändern, dann wird app:backgroundTint wirksam.

enter image description here

In my project I used it, it worked.

+2

Und "app" ist wie folgt definiert: xmlns: app = "http://schemas.android.com/apk/res-auto" – jk7

+0

Ich habe ein lineares Layout, auf dem ich Android verwende: background = "@ drawable/background_sign_up " app: backgroundTint =" # dd282d50 " android: backgroundTintMode =" multiplizieren ", was zu tun ist. – ashishdhiman2007

+0

Funktioniert, aber es sagt: "Unerwarteter Namespace-Präfix" app "für Tag gefunden Button in app: backgroundTint-Zeile – CGR

2

Ripples sind nicht als integrierte Funktionalität für Android verfügbar < 21. Dies liegt an Leistungsproblemen: Geräte mit der neuen API können RenderThread verwenden, das älteren Geräten nicht zur Verfügung steht. Siehe auch: http://android-developers.blogspot.de/2014/10/appcompat-v21-material-design-for-pre.html

Warum gibt es keine Wellen auf Pre-Lutscher? Vieles, was es RippleDrawable ermöglicht, reibungslos zu laufen, ist das neue RenderThread von Android 5.0. Um die Leistung früherer Android-Versionen zu optimieren, haben wir RippleDrawable vorerst deaktiviert.