我刚刚在 FAB 上发现了一些问题,我想加强另一个答案。
setRippleColor 问题
因此,一旦您通过setRippleColor 以编程方式设置波纹颜色(按下时的 FAB 颜色),问题就会出现。但是,我们还有另一种设置方法,即调用:
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
ColorStateList rippleColor = ContextCompat.getColorStateList(context, R.color.fab_ripple_color);
fab.setBackgroundTintList(rippleColor);
你的项目需要有这样的结构:
/res/color/fab_ripple_color.xml
fab_ripple_color.xml 的代码是:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:color="@color/fab_color_pressed" />
<item android:state_focused="true" android:color="@color/fab_color_pressed" />
<item android:color="@color/fab_color_normal"/>
</selector>
最后,稍微改变你的 FAB:
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_action_add"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
app:fabSize="normal"
app:borderWidth="0dp"
app:elevation="6dp"
app:pressedTranslationZ="12dp"
app:rippleColor="@android:color/transparent"/> <!-- set to transparent color -->
对于 API 级别 21 及更高级别,将左右边距设置为 24dp:
...
android:layout_marginRight="24dp"
android:layout_marginBottom="24dp" />
FloatingActionButton 设计指南
正如您在上面的 FAB xml 代码中看到的那样,我设置了:
...
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
app:elevation="6dp"
app:pressedTranslationZ="12dp"
...
-
通过设置这些属性,您无需再次设置layout_marginTop 和layout_marginRight(仅在Lollipop 之前)。 Android 会自动将其放置在屏幕的右角,这与 Android Lollipop 中的普通 FAB 相同。
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
或者,您可以在CoordinatorLayout 中使用它:
android:layout_gravity="end|bottom"
- 根据来自 Google 的 this guide,您需要有 6dp
elevation 和 12dp pressedTranslationZ。