2015-04-27 30 views
13

Tôi muốn sử dụng hiệu ứng gợn trên Nút. AppCompat v22.1 đã thêm AppCompatButton và các chức năng mới vào AppCompat.AppCompatButton backgroundTint API <21

Layout của tôi:

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

Mở API 22 thiết bị thử nghiệm của tôi hiệu ứng gợn sóng hoạt động hoàn hảo, nhưng tôi là mã hóa cho API 11 và tiếc backgroundTint cần API> = 21. Làm thế nào tôi có thể thiết lập hiệu ứng gợn cho các nút trên các phiên bản API cũ hơn?

+0

Có thể http://stackoverflow.com/questions/26444391/primary-dark-color-android-under-api-21 bạn có thể câu trả lời của bạn ở đây. – Hardy

+0

Ripples không hoạt động trên hộp trước Lollipop, vì vậy bạn sẽ phải mô phỏng chúng. – Egor

+0

Ripple chỉ hoạt động đối với api> = 21 –

Trả lời

54

Chỉ cần sử dụng app:backgroundTint thay vì android:backgroundTint, màu sẽ có hiệu lực bên dưới Lollipop. Lý do là AppCompatActivityAppCompatDelegateImplV7 sử dụng AppCompatViewInflater để tự động thay đổi Nút hoặc TextView thành AppCompatButton hoặc AppCompatTextView, sau đó app:backgroundTint có hiệu lực.

enter image description here

In my project I used it, it worked.

+2

Và "ứng dụng" được định nghĩa như sau: xmlns: app = "http://schemas.android.com/apk/res-auto" – jk7

+0

Tôi có bố cục tuyến tính mà tôi đang sử dụng android: background = "@ drawable/background_sign_up " ứng dụng: backgroundTint =" # dd282d50 " android: backgroundTintMode =" nhân ", phải làm gì. – ashishdhiman2007

+0

Hoạt động nhưng nó nói: "Tiền tố không gian tên không mong muốn" ứng dụng được tìm thấy cho thẻ Nút trong ứng dụng: dòng backgroundTint – CGR

2

Ripples không khả dụng ở dạng chức năng xây dựng trên Android < 21. Điều này là do vấn đề hiệu suất: thiết bị có API mới có thể sử dụng RenderThread không khả dụng cho các thiết bị cũ hơn. Xem thêm: http://android-developers.blogspot.de/2014/10/appcompat-v21-material-design-for-pre.html

Tại sao không có gợn sóng trên kẹo trước? Rất nhiều thứ cho phép RippleDrawable chạy trơn tru là RenderThread mới của Android 5.0. Để tối ưu hóa hiệu suất trên các phiên bản Android trước, chúng tôi đã rời khỏi RippleDrawable ngay bây giờ.

Các vấn đề liên quan