Android怎么改变浮动动作按钮颜色?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (10)
  • 关注 (0)
  • 查看 (141)

几个小时来一直试图改变材质的浮动动作按钮的颜色,但没有成功。

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

但上面的一切都不起作用。

提问于
用户回答回答于

文献资料,默认情况下,它会将颜色设置为traces.xml属性色标...

此视图的背景色默认为主题的“颜色增量”。如果你希望在运行时更改此操作,则可以通过setBackoundTintList(ColStateList)进行更改。

If you wish to change the color

  • 在带有属性的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

正如注释中提到的@Dantalian,如果你希望更改图标颜色,可以使用

android:tint="@color/white"     
用户回答回答于

经过几次打击和试验,我很幸运:

    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中都适用。

用户回答回答于
 <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/value/color.xml中添加颜色,并在fab中包含该属性。

   app:backgroundTint="@color/addedColor"
用户回答回答于

这是gorilla的方法它的优点是广泛适用于这种情况和类似情况:

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>
用户回答回答于

文档建议默认采用@color/accent 但是,我们可以在代码中重写它,方法是

fab.setBackgroundTintList(ColorStateList)

使用这个库的最低API版本是15,所以你需要更新它!如果你不想这样做,那么你需要定义一个定制的绘图和装饰它!

用户回答回答于

Fab是基于你的colorAccent.

<style name="AppTheme" parent="Base.Theme.AppCompat.Light">
    <item name="colorAccent">@color/accent</item>
</style>
用户回答回答于

就用,

app:backgroundTint="@color/colorPrimary"

不使用,

android:backgroundTint="@color/colorPrimary"
用户回答回答于

如果你试图通过使用应用程序改变Fab的颜色,就会出现一些问题。按钮的框有不同的颜色,所以你必须做的是:

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

并在代码中设置颜色:

actionButton.setBackgroundTintList(ColorStateList.valueOf(getResources().getColor(R.color.white)));
用户回答回答于

在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

和not

android:backgroundTint="@android:color/white"
用户回答回答于

VijetBadiganNavar的答案是正确的,但使用ColorStateList通常很复杂,他没告诉我们怎么做。因为我们经常把注意力放在改变View其颜色处于正常和按下状态,我将添加更多细节:

  1. 如果你想改变FAB的颜色处于正常状态,你可以直接写 mfab。setBack背景TintList(ColStateList.value eOf(您的颜色为int));
  2. 如果你想改变FAB的颜色按下状态,你可以直接写

mfab.setRippleColor(您的颜色在int中);

通过设置此属性,当您长期按下FAB,一个与你的颜色将出现在你的触点,并显示在整个表面FAB请注意它不会变FAB正常状态下的颜色。在api 21(洛利波普)下面,没有波纹效应,但是FAB当你按下它的时候,它的颜色仍然会改变。

扫码关注云+社区

领取腾讯云代金券