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

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

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

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


当前回答

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

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

并在代码中设置颜色:

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

其他回答

如文档中所述,默认情况下,它接受styles.xml属性colorAccent中的颜色集。

此视图的背景颜色默认为主题的colorAccent。如果你想在运行时改变这个,那么你可以通过setBackgroundTintList(ColorStateList)这样做。

如果你想改变颜色

在XML中带有属性app: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"   

androidX库也需要在你的xml布局中设置一个0dp边界:

<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" />

我也有同样的问题,都在抓我的头发。谢谢你 https://stackoverflow.com/a/35697105/5228412

我们能做什么…

 favourite_fab.setImageDrawable(ContextCompat.getDrawable(getBaseContext(), R.drawable.favourite_selected));

这对我来说很好,希望其他人也能到达这里。

use

应用:backgroundTint = " @color /橙”


<com.google.android.material.floatingactionbutton.FloatingActionButton
        android:id="@+id/id_share_btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/share"
        app:backgroundTint="@color/orange"
        app:fabSize="mini"
        app:layout_anchorGravity="end|bottom|center" />



</androidx.coordinatorlayout.widget.CoordinatorLayout>

使用材质主题和材质组件FloatingActionButton,默认情况下,它采用styles.xml属性colorSecondary中的颜色集。

你可以在xml中使用app:backgroundTint属性:

<com.google.android.material.floatingactionbutton.FloatingActionButton
       ...
       app:backgroundTint=".."
       app:srcCompat="@drawable/ic_plus_24"/>

你可以使用fab.setBackgroundTintList(); 您可以使用<item name="backgroundTint">属性自定义样式

  <!--<item name="floatingActionButtonStyle">@style/Widget.MaterialComponents.FloatingActionButton</item> -->
  <style name="MyFloatingActionButton" parent="@style/Widget.MaterialComponents.FloatingActionButton">
    <item name="backgroundTint">#00f</item>
    <!-- color used by the icon -->
    <item name="tint">@color/...</item>
  </style>

从材质组件的1.1.0版本开始,你可以使用新的materialThemeOverlay属性来覆盖某些组件的默认颜色:

  <style name="MyFloatingActionButton" parent="@style/Widget.MaterialComponents.FloatingActionButton">
    <item name="materialThemeOverlay">@style/MyFabOverlay</item>
  </style>

  <style name="MyFabOverlay">
    <item name="colorSecondary">@color/custom2</item>
    <!-- color used by the icon -->
    <item name="colorOnSecondary">@color/...</item>
  </style>

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。