7

Tôi cố gắng để thay đổi màu sắc biểu tượng của biểu tượng trong một FAB dựa vào nút trạng thái:Thay đổi màu sắc biểu tượng của FAB dựa trên trạng thái w/libs compat

<android.support.design.widget.FloatingActionButton 
    android:id="@+id/search_button" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="bottom|end" 
    android:layout_margin="16dp" 
    android:tint="@color/add_button_tint" 
    android:src="@drawable/ic_add_black_24dp" /> 

add_button_tint.xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_selected="true" 
     android:color="@color/white" /> 

    <item android:color="@color/black"/> 
</selector> 

Điều này hoạt động tốt trong API> 23, tuy nhiên trong các phiên bản cũ hơn của Android, nó sẽ ném một ngoại lệ.

Đây là nơi tôi bị lẫn lộn:

Android: cuộc sống hữu màu trong hỗ trợ FAB và hoạt động nếu nó chỉ là một màu sắc, thậm chí trong các phiên bản cũ của Android. IE hoạt động trong tất cả các phiên bản tôi đã thử nghiệm:

android:tint="@color/black 

Nhưng khi tôi sử dụng bộ chọn thì không. Tôi đang làm gì sai? Có thể thay đổi màu biểu tượng dựa trên trạng thái cho FAB trong các phiên bản Android cũ hơn không?

+0

bạn đã cố gắng làm điều này trong mã qua setImageTintList FloatingActionButton của()? – CSmith

+0

setImageTintList() chỉ khả dụng trên api 21 trở lên. Tôi cần một cách appcompat để tô màu các biểu tượng đó. – lostintranslation

+0

Tôi cảm thấy như đây là một lỗi hoặc giám sát trong đó FAB không mở rộng android.support.v7.widget.AppCompatImageView, thay vào đó nó mở rộng phiên bản không phải appcompat. Mà có vẻ xấu như FAB là trong lib hỗ trợ widget. – lostintranslation

Trả lời

8

ColorStateList trong android: màu không được hỗ trợ trước khi API 21.

Xem: https://code.google.com/p/android/issues/detail?id=204671


Bạn có thể sử dụng AppCompat của AppCompatResources và hỗ trợ-v4 DrawableCompat để hỗ trợ pre-kẹo . Trước tiên, hãy xóa android:tint="@color/add_button_tint" khỏi bố cục của bạn. Sau đó thiết lập các ColorStateList lập trình:

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.search_button); 
ColorStateList csl = AppCompatResources.getColorStateList(this, R.color.add_button_tint); 
Drawable drawable = DrawableCompat.wrap(fab.getDrawable()); 
DrawableCompat.setTintList(drawable, csl); 
fab.setImageDrawable(drawable); 

Xem How to use setImageTintList() on Android API < 21

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