Android 如何更改浮动操作按钮的颜色

644

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

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

但是上述方法都没有奏效。我还尝试了提出的重复问题中的解决方案,但它们都无法正常工作;该按钮仍然保持绿色,并且变成了一个正方形。

另外,知道如何添加涟漪效果也会很好,但我也没搞懂怎么做。


涟漪效果在早期的安卓设备上不可用,因为它使用了新的RenderThread - tachyonflux
@karaokyo 好的,但我该如何做呢? - Jjang
52
我认为谷歌在让这些东西易于使用方面做得很差。 - Joop
要以编程方式实现向后兼容,请参见https://dev59.com/D10Z5IYBdhLWcg3w4jhy#38618011 - Ralph Pina
28个回答

14

这份文件建议默认使用@color/accent颜色,但我们可以通过代码来覆盖它。

fab.setBackgroundTintList(ColorStateList)

还要记得,

使用这个库的最低API版本是15,所以你需要更新它!如果你不想更新,那么你需要定义一个自定义可绘制对象并进行装饰!


工作良好,但我必须针对API 21+进行目标设置。 如果我以API 8为目标,则无法调用此方法。 - Jjang
只需包含由谷歌发布的设计库“com.android.support:design:22.2.0”。 这可用于非棒棒糖版本的设备!干杯!! - Vijet Badigannavar
当然可以,但是这段代码出错了:调用需要API级别21(当前最低级别为8):android.widget.ImageView#setBackgroundTintList。 - Jjang
使用此库的最低API版本为15,因此您需要更新它!如果您不想这样做,则需要定义自定义可绘制对象并进行装饰! - Vijet Badigannavar
哦,谢谢!我不知道,以为是21,因为错误信息是这样说的。请将此作为答案发布,我会接受它! - Jjang

14

使用以下代码可以更改浮动操作按钮的背景颜色:

app:backgroundTint="@color/blue"

更改悬浮操作按钮图标的颜色

android:tint="@color/white"     

应该使用app:tint而不是android:tint - undefined

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

9

我遇到了同样的问题,这让我很苦恼。感谢https://dev59.com/flwY5IYBdhLWcg3wATpt#35697105提供的帮助。

我们可以做什么...

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

对我来说它很好用,希望其他人也能受益。


虽然这在理论上可以回答问题,但最好包括答案的基本部分,并提供参考链接。 - Bhargav Rao

9

多亏了自动完成功能,经过几次尝试后我终于幸运地找到了答案:

    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    card_view:backgroundTint="@color/whicheverColorYouLike"

-- 或 --(两者基本相同)

    xmlns:app="http://schemas.android.com/apk/res-auto"
    app:backgroundTint="@color/whicheverColorYouLike"

在API版本17和设计库23.1.0上,这对我很有效。


7

对于材料设计,我只是像这样更改了浮动操作按钮的颜色, 在您的“浮动操作按钮”xml中添加以下两行。 完成了,

 android:backgroundTint="@color/colorPrimaryDark"
 app:borderWidth="0dp"

6
使用数据绑定时,您可以像这样做:

数据绑定

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

我制作了一个非常简单的示例

6
如果您的浮动操作按钮没有可绘制对象,您可以使用以下代码以编程方式更改其色调:
fab.getBackground().mutate().setTint(ContextCompat.getColor(yourContext, R.color.anyColor));

这就是我一直在寻找的解决方案。我有一个带有背景色的简单fab,但找不到以编程方式更改它的方法,直到我找到了这个。 - Redar
我使用数据绑定,但是出现了NullPointerException(空指针异常)... - PeterPazmandi

4
我是这样做的: android:background="@color/colorAccent" 我只需要进入res文件夹,点击values文件夹,然后在colors.xml文件中更改colorAccent的颜色,并在android:background中调用它,就完成了。

3
我们忽略的一点是,在设置按钮颜色之前,重要的是先确定你想要的颜色值。因此,你可以进入“values” > “color”。你会发现默认的颜色,但你也可以通过复制和粘贴来创建颜色,并更改它们的颜色和名称。然后...当你去改变浮动按钮的颜色(在activity_main中),你可以选择你创建的颜色。
例如 - 在“values” > “colors”中的代码,包括默认颜色和我创建的三种颜色:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#3F51B5</color>
    <color name="colorPrimaryDark">#303F9F</color>
    <color name="colorAccent">#FF4081</color>

    <color name="corBotaoFoto">#f52411</color>
    <color name="corPar">#8e8f93</color>
    <color name="corImpar">#494848</color>

</resources>

现在我的浮动操作按钮采用我创建并命名为“corPar”的颜色:
<android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|end"
        android:layout_margin="@dimen/fab_margin"
        android:src="@android:drawable/ic_input_add"
        android:tint="#ffffff"
        app:backgroundTint="@color/corPar"/>

这对我很有效。祝你好运!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接