我一直试图改变材质的浮动动作按钮的颜色,但没有成功。

<android.support.design.widget.FloatingActionButton
    android:id="@+id/profile_edit_fab"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="end|bottom"
    android:layout_margin="16dp"
    android:clickable="true"
    android:src="@drawable/ic_mode_edit_white_24dp" />

我试着补充:

android:background="@color/mycolor"

或者通过代码:

FloatingActionButton fab = (FloatingActionButton) rootView.findViewById(R.id.profile_edit_fab);
fab.setBackgroundColor(Color.parseColor("#mycolor"));

or

fab.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#mycolor")));

但上述方法都不起作用。我也尝试了提出的重复问题的解决方案,但没有一个可行;按钮仍然是绿色的,也变成了一个正方形。

附:如果知道如何增加连锁反应也很好,我也不明白。


当前回答

如果你有一个没有可绘制的浮动动作按钮,你可以通过编程方式使用:

fab.getBackground().mutate().setTint(ContextCompat.getColor(yourContext, R.color.anyColor));

其他回答

正如Vasil Valchev在评论中指出的那样,它比看起来要简单,但是在我的XML中有一个我没有注意到的细微差别。

<android.support.design.widget.FloatingActionButton
    android:id="@+id/profile_edit_fab"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="end|bottom"
    android:layout_margin="16dp"
    android:clickable="true"
    android:src="@drawable/ic_mode_edit_white_24dp"
    app:backgroundTint="@android:color/white"/>

注意它是:

app:backgroundTint="@android:color/white"

而不是

android:backgroundTint="@android:color/white"

只使用,

app:backgroundTint="@color/colorPrimary"

其中用途,

android:backgroundTint="@color/colorPrimary"

其他解决方案也可能奏效。这是10磅大猩猩的方法,其优点是广泛适用于这种情况和类似情况:

Styles.xml:

<style name="AppTheme.FloatingAccentButtonOverlay" >
    <item name="colorAccent">@color/colorFloatingActionBarAccent</item>
</style>

你的布局xml:

<android.support.design.widget.FloatingActionButton
       android:theme="AppTheme.FloatingAccentButtonOverlay"
       ...
 </android.support.design.widget.FloatingActionButton>

当使用数据绑定时,你可以这样做:

android:backgroundTint="@{item.selected ? @color/selected : @color/unselected}"

我举了一个非常简单的例子

材质1.1.0中浮动动作按钮的新主题属性映射

在你的应用主题中:

设置colorSecondary为FAB设置背景颜色(映射到backgroundTint) 设置colorOnSecondary为图标/文本和FAB的波纹色设置颜色(映射到tint和rippleColor)


<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
    <!-- ...whatever else you declare in your app theme.. -->
    <!-- Set colorSecondary to change background of FAB (backgroundTint) -->
    <item name="colorSecondary">@color/colorSecondary</item>
    <!-- Customize colorSecondary to change icon/text of FAB (maps to tint and rippleColor) -->
    <item name="colorOnSecondary">@android:color/white</item>
</style>