尝试了几个小时来改变材质的浮动动作按钮颜色,但没有成功。
<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。知道如何添加涟漪效应也是很好的,也无法理解。
答案 0 :(得分:917)
如documentation所述,默认情况下,它采用 styles.xml 属性 colorAccent 中设置的颜色。
此视图的背景颜色默认为主题的colorAccent。如果您希望在运行时更改此设置,则可以通过setBackgroundTintList(ColorStateList)进行更改。
如果您想更改颜色
<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" >
正如@Dantalian在评论中提到的,如果你想改变图标颜色,你可以使用
android:tint="@color/white"
答案 1 :(得分:218)
Vijet Badigannavar的回答是正确的,但使用ColorStateList
通常很复杂,他没有告诉我们该怎么做。由于我们经常专注于在正常和按下状态下更改View
的颜色,我将添加更多细节:
如果你想在正常状态下改变FAB
的颜色,你可以写
mFab.setBackgroundTintList(ColorStateList.valueOf(your color in int));
如果您想在按下状态下更改FAB
的颜色,感谢设计支持库 22.2.1 ,您只需编写
mFab.setRippleColor(your color in int);
通过设置此属性,当您长按FAB
时,您的颜色的波纹将出现在您的触摸点并显示在FAB
的整个表面中。请注意,在正常状态下它不会改变FAB
的颜色。在API 21(Lollipop)下面,没有涟漪效应,但当你按下它时,FAB
的颜色仍会改变。
最后,如果你想为状态实现更复杂的效果,那么你应该深入研究ColorStateList
,这是一个讨论它的SO问题:How do I create ColorStateList programmatically?。
<强>更新强>
感谢@ Kaitlyn的评论。要使用backgroundTint作为颜色删除FAB的笔划,可以在xml中设置app:borderWidth="0dp"
。
答案 2 :(得分:108)
正如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"
答案 3 :(得分:51)
如果您尝试使用app更改FAB的颜色,则会出现一些问题。 按钮框有不同的颜色,所以你必须要做的事情:
app:backgroundTint="@android:color/transparent"
并在代码中设置颜色:
actionButton.setBackgroundTintList(ColorStateList.valueOf(getResources().getColor(R.color.white)));
答案 4 :(得分:44)
只需使用,
app:backgroundTint="@color/colorPrimary"
不要使用,
android:backgroundTint="@color/colorPrimary"
答案 5 :(得分:27)
FAB根据您的colorAccent
进行着色。
<style name="AppTheme" parent="Base.Theme.AppCompat.Light">
<item name="colorAccent">@color/accent</item>
</style>
答案 6 :(得分:19)
mFab.setBackgroundTintList(ColorStateList.valueOf(ContextCompat.getColor(mContext,R.color.mColor)));
答案 7 :(得分:12)
其他解决方案可能有效。这是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>
答案 8 :(得分:10)
该文档表明它默认采用@ color / accent。但我们可以使用
覆盖代码fab.setBackgroundTintList(ColorStateList)
还要记住,
使用此库的最低API版本为15,因此您需要更新它!如果您不想这样做,那么您需要定义一个自定义drawable并装饰它!
答案 9 :(得分:6)
<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中添加颜色 并在您的工厂中包含该属性
app:backgroundTint="@color/addedColor"
答案 10 :(得分:6)
感谢自动填充功能。经过几次打击和试验后,我很幸运:
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。
答案 11 :(得分:5)
我遇到了同样的问题而且它全都抢了我的头发。谢谢你 https://stackoverflow.com/a/35697105/5228412
我们能做什么..
favourite_fab.setImageDrawable(ContextCompat.getDrawable(getBaseContext(), R.drawable.favourite_selected));
它对我来说很好,并希望有人能够到达这里。
答案 12 :(得分:4)
使用下面的行
更改浮动操作按钮背景颜色app:backgroundTint="@color/blue"
更改浮动操作按钮图标颜色
android:tint="@color/white"
答案 13 :(得分:3)
使用Data Binding时,您可以执行以下操作:
android:backgroundTint="@{item.selected ? @color/selected : @color/unselected}"
我做了一个非常简单的example
答案 14 :(得分:2)
答案 15 :(得分:2)
默认情况下,使用Material Theme和材料成分 FloatingActionButton
时,它将采用在styles.xml
属性 colorSecondary
中设置的颜色。
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>
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>
答案 16 :(得分:1)
我们缺少的一点是,在按钮上设置颜色之前,处理此颜色所需的值非常重要。所以你可以去价值观&gt;颜色。您将找到默认值,但您也可以通过粘贴和粘贴它们来创建颜色,更改颜色和名称。然后......当你去改变浮动按钮的颜色(在activity_main中)时,你可以选择你创建的那个
例证 - 值的代码&gt;默认颜色的颜色+我创造的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>
现在我的浮动操作按钮带有我创建的颜色并命名为“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"/>
它对我有用。祝你好运!
答案 17 :(得分:1)
材料1.1.0中Floating Action Button的新主题属性映射
在您的应用主题中:
<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
<!-- ...whatever else you declare in your app theme.. -->
<!-- Set colorSecondary to change background of FAB (backgroundTint) -->
<item name="colorSecondary">@color/colorSecondary</item>
<!-- Customize colorSecondary to change icon/text of FAB (maps to tint and rippleColor) -->
<item name="colorOnSecondary">@android:color/white</item>
</style>
答案 18 :(得分:1)
如果您的浮动操作按钮没有可绘制的对象,则可以使用以下方法以编程方式更改色调:
fab.getBackground().mutate().setTint(ContextCompat.getColor(yourContext, R.color.anyColor));
答案 19 :(得分:1)
对于Material design,我只是这样更改了浮动操作按钮的颜色, 在“浮动操作”按钮xml中添加以下两行。 完成
android:backgroundTint="@color/colorPrimaryDark"
app:borderWidth="0dp"
答案 20 :(得分:0)
如果您想更改代码,可以使用它 floating.setBackgroundTintList(getResources()getColorStateList(R.color.vermelho));
答案 21 :(得分:0)
在color.xml文件中添加颜色,然后添加此行代码...
floatingActionButton.setBackgroundTintList(ColorStateList.valueOf(getResources().getColor(R.color.fab2_color)));
答案 22 :(得分:0)
使用
中的app:backgroundTint =“ @ color / orange”
<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>
答案 23 :(得分:0)
在科特林:
A
答案 24 :(得分:0)
我的解决方案,适用于我的数据绑定
val color = ContextCompat.getColor(context, R.color.colorPrimary)
binding.fab.backgroundTintList = ColorStateList.valueOf(getColor)