安卓更改浮动操作按钮颜色

我一直在尝试更改材质的浮动操作按钮颜色,但没有成功。

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

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

但上述方法均无效。我也尝试了建议的重复问题中的解决方案,但没有一个有效;按钮保持绿色,也变成了一个正方形。

P.S.知道如何添加涟漪效应也很好,也无法理解。


答案 1

文档中所述,默认情况下,它采用样式中设置的颜色.xml属性 colorAccent

此视图的背景色默认为主题的颜色Accent。如果您希望在运行时更改此设置,则可以通过setBackgroundTintList(ColorStateList)执行此操作。

如果您想更改颜色

  • 在 XML 中,使用属性应用:backgroundTint
<android.support.design.widget.FloatingActionButton
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/ic_add"
    app:backgroundTint="@color/orange"
    app:borderWidth="0dp"
    app:elevation="6dp"
    app:fabSize="normal" >
  • 在代码中使用 .setBackgroundTintList(下面由 ywwynm 回答)

正如注释中提到的@Dantalian,如果您希望将设计支持库的图标颜色更改为 v22(含),则可以使用

android:tint="@color/white"     

对于 v23 以来的设计支持库,您可以使用:

app:tint="@color/white"   

此外,对于库,您需要在 xml 布局中设置 0dp 边框:androidX

<com.google.android.material.floatingactionbutton.FloatingActionButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/ic_add"
    app:backgroundTint="@color/orange"
    app:borderWidth="0dp"
    app:elevation="6dp"
    app:fabSize="normal" />

答案 2

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

  1. 如果你想在正常状态下更改 的颜色,你可以直接写FAB

    mFab.setBackgroundTintList(ColorStateList.valueOf(your color in int));
    
  2. 如果你想在按下状态下更改 的颜色,感谢设计支持库22.2.1,你可以直接写FAB

    mFab.setRippleColor(your color in int);
    

    通过设置此属性,当您长按 时,带有颜色的波纹将出现在您的触摸点,并显露出 .请注意,在正常状态下,它不会改变 的颜色。在 API 21(棒棒糖)下,没有涟漪效应,但 当您按下它时,它的颜色仍然会发生变化。FABFABFABFAB

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

更新:感谢您@Kaitlyn的评论。若要使用 backgroundTint 作为其颜色删除 FAB 的笔触,可以在 xml 中进行设置。app:borderWidth="0dp"


推荐