2015-04-27 27 views
13

Chcę użyć efektów pulsujących na przyciskach. AppCompat v22.1 dodał AppCompatButton i nowe funkcje do barwienia AppCompat.AppCompatButton backgroundTint API <21

Moja Układ:

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

Na moim API 22 urządzeniu testowym efekt tętnienia działa idealnie, ale jestem kodującej API 11 i niestety backgroundTint potrzebuje API> = 21. W jaki sposób można ustawić efekt fali do przycisków w starszych wersjach interfejsu API?

+0

Może być http://stackoverflow.com/questions/26444391/primary-dark-color-android-under-api-21 można odpowiedź tutaj. – Hardy

+0

Ripples nie działają po wyjęciu z pudełka na pre-Lollipop, więc będziesz musiał je naśladować. – Egor

+0

Ripple działa tylko dla api> = 21 –

Odpowiedz

54

Po prostu użyj app:backgroundTint zamiast android:backgroundTint, odcień zacznie obowiązywać poniżej Lollipop. Powodem jest AppCompatActivityAppCompatDelegateImplV7 użycie AppCompatViewInflater, aby automatycznie zmienić Button lub TextView na AppCompatButton lub AppCompatTextView, a następnie app:backgroundTint.

enter image description here

In my project I used it, it worked.

+2

"Aplikacja" jest zdefiniowana następująco: xmlns: app = "http://schemas.android.com/apk/res-auto" – jk7

+0

Mam liniowy układ, w którym używam Androida: background = "@ drawable/background_sign_up " aplikacja: backgroundTint =" # dd282d50 " android: backgroundTintMode =" pomnóż ", co robić. – ashishdhiman2007

+0

Działa, ale mówi: "Nieoczekiwany prefiks przestrzeni nazw" aplikacja "znaleziono dla tagu Przycisk w aplikacji: backgroundTint linia – CGR

2

Ripples nie są dostępne jako funkcja wbudowana w Androidzie < 21. Jest to spowodowane problemami z wydajnością: urządzenia z nowym interfejsem API mogą korzystać z RenderThread, które nie jest dostępne dla starszych urządzeń. Zobacz też: http://android-developers.blogspot.de/2014/10/appcompat-v21-material-design-for-pre.html

Dlaczego nie ma zmarszczek na pre-Lollipop? Wiele z tego, co pozwala na płynne działanie RippleDrawable, to nowy RenderThread w systemie Android 5.0. Aby zoptymalizować wydajność w poprzednich wersjach Androida, na razie opuściliśmy RippleDrawable.

Powiązane problemy