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