簡介
FloatingActionButton:懸浮按鈕。
首先看下其文檔:

FloatingActionButton 是一個 ImageButton,其包名為android.support.design.widget.FloatingActionButton,所以它是存在于design 包中的,不是在 v7 包,所以要導(dǎo)入design包:
implementation 'com.android.support:design:<version>'
FloatingActionButton 代表一個頁面中最主要的操作,其位于 UI 最頂層(懸?。?。
FAB 通常有兩種尺寸:
- 56 * 56 dp :默認的大小,最常用的尺寸。
- 40 * 40 dp :Mini版。
FAB 中間的圖標,google 推薦的大小是:24 * 24dp。
其尺寸大小可以通過屬性fabSize進行設(shè)置。
FAB 間接繼承于 ImageView,因此你可以控制由 setImageDrawable(Drawable) 設(shè)置的 icon。
FAB 的背景顏色默認為主題的colorAccent,如果你想在程序運行時進行控制,可以通過 setBackgroundTintList(ColorStateList)。
FAB的 XMl 屬性除了繼承自View,ImageView的屬性外,Android 5.0后引入的常用新屬性如下:
app:elevation="50dp":陰影的高度,elevation是Android 5.0中引入的新屬性,設(shè)置該屬性使控件有一個陰影,感覺該控件像是“浮”起來一樣,這樣達到3D效果。對應(yīng)的方法:setCompatElevation(float)app:fabSize="normal":FAB的大小,為normal時,大小為:56 * 56dp ,為mini時,大小為: 40 * 40 dp。app:backgroundTint="#31bfcf":設(shè)置FAB的背景顏色。這里需要注意的是,:backgroundTint這個屬性的值是一個 ColorStateList 類型,如果你誤用一個 colors 文件中定義的一個顏色值,在點擊時將無法產(chǎn)生漣漪(ripple)交互效果。android:clickable="true":當你使用了backgroundTint屬性來改變系統(tǒng)的背景紅色,一定要記得設(shè)置clickable屬性為true,否則也是無法產(chǎn)生漣漪(ripple)交互效果的;app:rippleColor="#e7d16b":點擊FAB時,形成的波紋顏色。其默認值為 theme 中的colorControlHighlight。
注1: 使用上述屬性前,先要引入命名空間:
xmlns:app="http://schemas.android.com/apk/res-auto"
注2: 在 Android 5.x 中 FAB 存在的一些問題:
沒有陰影:
解決方法:設(shè)置app:borderWidth="0dp"按上述設(shè)置后,陰影出現(xiàn)了,但是竟然有矩形的邊界!
解決方法:需要設(shè)置一個 margin 的值。在5.0之前,會默認就有一個外邊距(不過并非是margin,只是效果相同)。
綜上,F(xiàn)AB 健壯的布局為:增加如下兩行配置
app:borderWidth="0dp"
android:layout_margin="20dp"
示例
下面介紹下 FloatingActionButton 最基礎(chǔ)的使用示例:
- 首先在布局文件中添加 FAB:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_margin="20dp"
android:src="@drawable/emoticon"
app:borderWidth="0dp" />
</RelativeLayout>
-
Activity中添加單擊事件:
public class FloatingActionButtonActivity extends AppCompatActivity {
private FloatingActionButton mFab;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fat);
this.mFab = this.findViewById(R.id.fab);
this.mFab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(FloatingActionButtonActivity.this, "FAB clicked!!", Toast.LENGTH_SHORT).show();
}
});
}
}
效果:

其實,F(xiàn)AB 配合著其他控件,能夠做出一些非常炫酷的交互動畫效果,不過本節(jié)就先不深入下去了。