Floating action button (FAB) 是一个带有阴影的简单圆形按钮,它上浮于其他 UI 之中,它通常用来驱动一些动作,例如添加一个 item、新建一封 email 等等。
查看 Floating action button (FAB) 的代码,我们发现 FAB 可以有两个大小:i),正常(56dp)或者 ii)小型(40dp)
final int getSizeDimension() { switch(this.mSize) { case 0: default: return this.getResources().getDimensionPixelSize(dimen.fab_size_normal); case 1: return this.getResources().getDimensionPixelSize(dimen.fab_size_mini); } }
FloatingActionButton 只是一个继承了 ImageView 的 view。
首先,添加以下代码到 gradle 文件:
compile 'com.android.support:design:22.2.0'
把 FloatingActionButton 引入 xml 布局文件:
<FrameLayout android:id="@+id/layoutInner" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.design.widget.FloatingActionButton android:id="@+id/btnFloatingAction" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|right" /> </FrameLayout>
开发者手册只描述了 fabSize 这个属性,已经有人提了 issue#178117 ,里面有其他属性的详细解释。以下是那些属性:
使用部分属性的例子:
<android.support.design.widget.FloatingActionButton android:id="@+id/btnFloatingAction" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|right" android:src="@drawable/ic_plus" app:fabSize="normal" app:rippleColor="@android:color/background_dark"/>
我们可以像普通控件那样去注册它的监听事件:
FloatingActionButton btnFab = (FloatingActionButton) findViewById(R.id.btnFloatingAction); btnFab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(MainActivity.this, "Hello FAB!", Toast.LENGTH_SHORT).show(); } });
这样,我们就完成了一个 FloatingActionButton 的 demo 了!
在写这篇博文的同时,发现了 FAB 的一些 bugs。我们来看看上面这个 demo 运行在 Kitkat 和 Lollipop 时候的效果:
很明显地可以看出,在 Lollipop 使用 FAB 的时候 margin 出现问题,我们可以这样来解决这个问题,在 API 21+ 定义 bottom 和 right margin 为 16dp,21 之前的都定义为 0dp
values/dimens.xml
<dimen name="fab_margin_right">0dp</dimen> <dimen name="fab_margin_bottom">0dp</dimen>
values-v21/dimens.xml
<dimen name="fab_margin_right">16dp</dimen> <dimen name="fab_margin_bottom">16dp</dimen>
在设置 FAB 属性的时候:
<android.support.design.widget.FloatingActionButton ... ... android:layout_marginBottom="@dimen/fab_margin_bottom" android:layout_marginRight="@dimen/fab_margin_right"/>
你应该也在上面的图中发现到这个问题了,我们可以通过设置边框宽度给它来解决这个问题:
<android.support.design.widget.FloatingActionButton ... ... app:fabSize="normal" app:borderWidth="0dp" android:layout_marginBottom="@dimen/fab_margin_bottom" android:layout_marginRight="@dimen/fab_margin_right"/>
Issue_ID:_#176116)">Issue 3 RotateAnimation 在 FAB 中不能使用 ( Issue ID: #176116 )
demo 代码下载:
https://github.com/PareshMayani/DesignSupportLibraryExamples