7

我試圖改變FAB內根據按鈕狀態的圖標圖標顏色:更改圖標的顏色W/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> 

這在API> 23中效果很好,但是在舊版本的android中,它會引發異常。

這裏就是我弄糊塗:

了android:支持FAB內的色調生命財產,如果它只是一個顏色,即使工作在較舊的Android版本。 IE這部作品在我測試的所有版本:

android:tint="@color/black 

但是當我使用的選擇沒有。我究竟做錯了什麼?是否有可能根據Android舊版本中的FAB狀態更改圖標顏色?

+0

你嘗試在代碼通過FloatingActionButton的setImageTintList這樣做()? – CSmith

+0

setImageTintList()僅在api 21和更高版本上可用。我需要一個appcompat方式來爲圖標着色。 – lostintranslation

+0

我覺得這是一個錯誤或疏忽,因爲FAB沒有擴展android.support.v7.widget.AppCompatImageView,而是擴展了非appcompat版本。這看起來不錯,因爲FAB在widget支持庫中。 – lostintranslation

回答

8

ColorStateList在機器人:色彩是不支持之前API 21

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


您可以使用程序兼容性的AppCompatResources和支持-V4 DrawableCompat支持預棒棒糖。首先,從佈局中刪除android:tint="@color/add_button_tint"。然後設置ColorStateList編程:

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

How to use setImageTintList() on Android API < 21