Android更改浮动操作button颜色

尝试了几个小时来更改Material的Floating Action Button颜色,但没有成功。

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

但以上都没有奏效。 我也尝试了“重复问题”中的解决scheme,但都没有工作,button保持绿色,也变成了方形。

我想要一个详细的答案,谢谢。

PS这也是很好的知道如何添加涟漪效应,也不明白这一点。

如文档中所述,默认情况下,它将采用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在评论中提到,如果你想改变图标的​​颜色,你可以使用

 android:tint="@color/white" 

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

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

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

     mFab.setRippleColor(your color in int); 

    通过设置这个属性,当你长时间按住FAB ,你的触摸点上会出现一个带有颜色的波纹,并显示在FAB整个表面。 请注意,在正常状态下不会改变FAB的颜色。 在API 21(棒棒糖)下面,没有连锁反应,但是当你按下FAB的颜色时,它的颜色仍然会改变。

最后,如果你想为状态实现更复杂的效果,那么你应该深入挖掘ColorStateList ,下面是讨论它的SO问题: 如何以编程方式创buildColorStateList? 。

更新:感谢@ Kaitlyn的评论。 要使用backgroundTint作为颜色去除FAB中风,可以在xml中设置app:borderWidth="0dp"

正如Vasil Valchev在评论中指出的那样,它看起来比它更简单,但有一个细微的差别,我没有注意到我的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 

不是

 android:backgroundTint="@android:color/white" 

如果您尝试使用应用程序更改FAB的颜色,则会出现一些问题。 button的框架有不同的颜色,所以你必须做的:

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

并在代码中设置颜色:

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

只是使用,

 app:backgroundTint="@color/colorPrimary" 

不要使用,

 android:backgroundTint="@color/colorPrimary" 

FAB根据您的colorAccent着色。

 <style name="AppTheme" parent="Base.Theme.AppCompat.Light"> <item name="colorAccent">@color/accent</item> </style> 

该文件暗示它默认使用@ color / accent。 但是我们可以通过使用代码覆盖它

 fab.setBackgroundTintList(ColorStateList) 

还记得,

使用这个库的最小API版本是15,所以你需要更新它! 如果你不想这样做,那么你需要定义一个自定义drawable并装饰它!

其他解决scheme可能工作 这是10磅的大猩猩方法,具有广泛适用于这个和类似情况的优势:

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

感谢自动完成。 经过几次打击和试验,我感到很幸运:

  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上适用于devise库23.1.0。

我也遇到了同样的问题,我的头发都被抢走了。 感谢这个https://stackoverflow.com/a/35697105/5228412

我们可以做什么

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

它对我来说工作正常,并希望其他人到达这里。

 mFab.setBackgroundTintList(ColorStateList.valueOf(ContextCompat.getColor(mContext,R.color.mColor))); 

我们遗漏的一点是,在button上设置颜色之前,重要的是处理这个颜色所需的值。 所以你可以去value> color。 你会发现默认的,但你也可以通过copping和粘贴来创build颜色,改变颜色和名称。 然后…当你去改变浮动button的颜色(在activity_main),你可以select一个你创build的

示例 – 使用默认颜色的值>颜色+我已经创build的另外3种颜色:

 <?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> 

现在我的浮动动作button与我创build的颜色和命名为“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"/> 

它为我工作。 祝你好运!

如果你使用Xamarin进行android应用程序开发,那么使用下面的代码来改变浮动button的颜色。

 FloatingActionButton fa = root.FindViewById<FloatingActionButton>(Resource.Id.fabback); Android.Content.Res.ColorStateList csl = new Android.Content.Res.ColorStateList(new int[][] { new int[0] }, new int[]{Android.Graphics.Color.ParseColor("#000000") }); fab.BackgroundTintList= csl; 

“#000000”用于黑色,您可以根据自己的需求进行更改。

更改浮动操作button使用下面的线应用程序的背景颜色:backgroundTint =“@ color / blue”

更改浮动操作button图标颜色android:tint =“@ color / white”