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

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

其他回答

对于材质设计,我只是改变了浮动动作按钮的颜色,就像这样, 在浮动动作按钮xml中添加以下两行。 和完成,

 android:backgroundTint="@color/colorPrimaryDark"
 app:borderWidth="0dp"
 <android.support.design.widget.FloatingActionButton
    android:id="@+id/fab"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom|end"
    app:elevation="6dp"
    app:backgroundTint="@color/colorAccent"
    app:pressedTranslationZ="12dp"
    android:layout_margin="@dimen/fab_margin"
    android:src="@drawable/add"/>

注意,您在res/values/color.xml中添加了颜色 并在fab中包含该属性

   app:backgroundTint="@color/addedColor"

如果你尝试用app改变FAB的颜色,会有一些问题。 按钮的边框有不同的颜色,所以你必须做什么:

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

并在代码中设置颜色:

actionButton.setBackgroundTintList(ColorStateList.valueOf(getResources().getColor(R.color.white)));

Vijet Badigannavar的答案是正确的,但使用ColorStateList通常是复杂的,他没有告诉我们如何做到这一点。由于我们经常关注在正常和按下状态下改变视图的颜色,我将添加更多细节:

If you want to change FAB's color in normal state, you can just write mFab.setBackgroundTintList(ColorStateList.valueOf(your color in int)); If you want to change FAB's color in pressed state, thanks for Design Support Library 22.2.1, you can just write mFab.setRippleColor(your color in int); By setting this attribute, when you long-pressed the FAB, a ripple with your color will appear at your touch point and reveal into whole surface of FAB. Please notice that it won't change FAB's color in normal state. Below API 21(Lollipop), there is no ripple effect but FAB's color will still change when you're pressing it.

最后,如果你想为状态实现更复杂的效果,那么你应该深入研究ColorStateList,这里有一个SO问题讨论它:我如何以编程方式创建ColorStateList ?

更新: 谢谢@Kaitlyn的评论。要删除FAB的笔画使用backgroundTint作为它的颜色,你可以设置app:borderWidth="0dp"在你的xml。

我的解决方案,用数据绑定对我有效

val color = ContextCompat.getColor(context, R.color.colorPrimary)
binding.fab.backgroundTintList = ColorStateList.valueOf(getColor)