我一直在尝试更改 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")));
但以上都没有奏效。我也尝试了提出的重复问题中的解决方案,但它们都不起作用;按钮保持绿色,也变成了一个正方形。
PS如果知道如何添加涟漪效果也很好,也无法理解。
如 documentation 中所述,默认情况下,它采用 styles.xml 属性 colorAccent 中设置的颜色。
此视图的背景颜色默认为主题的 colorAccent。如果您希望在运行时更改此设置,则可以通过 setBackgroundTintList(ColorStateList) 进行。
如果你想改变颜色
在具有属性 app:backgroundTint 的 XML 中
<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" />
Vijet Badigannavar 的回答是正确的,但使用 ColorStateList
通常很复杂,他没有告诉我们如何去做。由于我们经常关注在正常和按下状态下更改 View
的颜色,因此我将添加更多细节:
如果要在正常状态下更改 FAB 的颜色,只需编写 mFab.setBackgroundTintList(ColorStateList.valueOf(your color in int));如果你想改变 FAB 在按下状态下的颜色,感谢 Design Support Library 22.2.1,你可以写 mFab.setRippleColor(your color in int);通过设置此属性,当您长按 FAB 时,您的触摸点会出现带有您颜色的波纹,并显示在 FAB 的整个表面上。请注意,在正常状态下它不会改变 FAB 的颜色。在 API 21(Lollipop)以下,没有涟漪效应,但是当你按下它时,FAB 的颜色仍然会改变。
最后,如果你想为状态实现更复杂的效果,那么你应该深入挖掘 ColorStateList
,这里有一个 SO question 讨论它:How do I create ColorStateList programmatically?。
更新:感谢@Kaitlyn 的评论。要使用 backgroundTint 作为其颜色来删除 FAB 的笔划,您可以在您的 xml 中设置 app:borderWidth="0dp"
。
app:borderWidth
?谢谢
FloatingActionButton
的源代码之后,恐怕您现在无法以编程方式设置它,因为 mBorderWidth
没有设置器。
正如 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"
android:backgroundTint=""
来自 Api 级别 21,是 Lollipop Material Design 的一部分,在 Lollipop 下面将被忽略。此外,它不会完全改变 FAB
颜色,因为它不是纯色。您必须使用 app:
才能使其工作。
android:color
导致我的应用程序崩溃,这让我发疯了!感谢您保存我的应用程序以及我剩下的理智 ;-)
如果您尝试使用应用程序更改 FAB 的颜色,则会出现一些问题。按钮的框架有不同的颜色,所以你必须做什么:
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>
mFab.setBackgroundTintList(ColorStateList.valueOf(ContextCompat.getColor(mContext,R.color.mColor)));
材料 1.1.0 中 Floating Action Button 的新主题属性映射
在您的应用主题中:
设置 colorSecondary 为 FAB 的背景设置颜色(映射到 backgroundTint)
设置 colorOnSecondary 以设置图标/文本的颜色和 FAB 的波纹颜色(映射到 tint 和ippleColor)
<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>
其他解决方案可能有效。这是 10 磅大猩猩的方法,其优点是广泛适用于这种情况和类似情况:
样式.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>
String types not allowed (at 'theme' with value 'AppTheme.FloatingAccentButtonOverlay')
中遇到编译器错误。也许我错过了styles.xml的一点......
android:theme="@style/AppTheme.FloatingAccentButtonOverlay"
但这个解决方案对我不起作用......
默认情况下,使用 Material Theme 和 材质组件 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="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>
https://i.stack.imgur.com/OqBj9.png
该文件建议它默认采用@color/accent。但是我们可以通过使用在代码上覆盖它
fab.setBackgroundTintList(ColorStateList)
还要记住,
使用这个库的最低 API 版本是 15,所以你需要更新它!如果你不想这样做,那么你需要定义一个自定义的drawable并装饰它!
使用下面的行更改浮动操作按钮的背景颜色
app:backgroundTint="@color/blue"
更改浮动操作按钮图标颜色
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 上对我有用。
我遇到了同样的问题,而且都在抢我的头发。感谢这个https://stackoverflow.com/a/35697105/5228412
我们能做什么..
favourite_fab.setImageDrawable(ContextCompat.getDrawable(getBaseContext(), R.drawable.favourite_selected));
它对我来说很好,并希望其他能到达这里的人。
<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"
使用 Data Binding 时,您可以执行以下操作:
android:backgroundTint="@{item.selected ? @color/selected : @color/unselected}"
我做了一个非常简单的example
如果您有一个没有可绘制的浮动操作按钮,您可以使用以下方式以编程方式更改色调:
fab.getBackground().mutate().setTint(ContextCompat.getColor(yourContext, R.color.anyColor));
对于材料设计,我只是像这样更改了浮动操作按钮的颜色,在您的浮动操作按钮 xml 中添加以下两行。并做了,
android:backgroundTint="@color/colorPrimaryDark"
app:borderWidth="0dp"
我是这样做的完成了
我们缺少的一点是,在您为按钮设置颜色之前,为该颜色设置所需的值很重要。所以你可以去值>颜色。您会找到默认的颜色,但您也可以通过复制和粘贴来创建颜色,更改颜色和名称。然后......当你去改变浮动按钮的颜色时(在activity_main中),你可以选择你创建的那个
示例 - 值的代码 > 默认颜色的颜色 + 我创建的另外 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"/>
它对我有用。祝你好运!
在科特林:
val gray = getColor(requireContext(), R.color.green)
binding.fabSubmit.backgroundTintList = ColorStateList.valueOf(gray)
我的解决方案,适用于数据绑定
val color = ContextCompat.getColor(context, R.color.colorPrimary)
binding.fab.backgroundTintList = ColorStateList.valueOf(getColor)
https://i.stack.imgur.com/N7Dto.png
在 color.xml 文件中添加颜色,然后添加这行代码... floatingActionButton.setBackgroundTintList(ColorStateList.valueOf(getResources().getColor(R.color.fab2_color)));
如果您想以编程方式更改颜色,可以使用此代码
floating.setBackgroundTintList(getResources().getColorStateList(R.color.vermelho));
利用
应用程序: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>
您可以使用 Extended,因此像这样设置 app:iconTint
:
<com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
android:id="@+id/fAB"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:icon="@drawable/d0"
app:iconTint="@color/white"
/>