Android改变浮动操作按钮的颜色

新手上路,请多包涵

我一直在尝试更改 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 如果知道如何添加涟漪效果也很好,我也听不懂。

原文由 Jjang 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 630
2 个回答

文档 中所述,默认情况下它采用 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" />

原文由 Marko 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

  1. 如果你想改变 FAB 在正常状态下的颜色,你可以这样写
   mFab.setBackgroundTintList(ColorStateList.valueOf(your color in int));

  1. 如果你想改变 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"

原文由 ywwynm 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题