Android 5.0中引入了一个很多新的设计,其中有一个是悬浮按钮Floating action button的规范,具体规范可以看这里Button。
网上有很多实现方法,不过最简单的还是使用ImageButton
,今天就来实现下。
根据设计规范:
![](http://treizeor.qiniudn.com/img/Screenshot from 2015-01-03 21:37:38.png)
我们先在文件res/values/dimens.xml
中定义一些用到的值:
1 2 3 4 5
| <resources> <dimen name="btn_fab_size">56dp</dimen> <dimen name="btn_fab_margin">16dp</dimen> <dimen name="default_elevation">8dp</dimen> </resources>
|
然后在布局文件中使用ImageButton
1 2 3 4 5 6 7 8 9 10 11
| <ImageButton android:id="@+id/btnFAB" android:layout_width="@dimen/btn_fab_size" android:layout_height="@dimen/btn_fab_size" android:layout_alignParentBottom="true" android:layout_marginBottom="@dimen/btn_fab_margin" android:layout_marginRight="@dimen/btn_fab_margin" android:src="@drawable/ic_add_white_24dp" android:background="@drawable/btn_fab_default" android:elevation="@dimen/default_elevation" android:layout_alignParentRight="true"/>
|
其中src图标建议在Google的开源图标库material-design-icons下载。
为了适配v21和v21以下的版本,分别创建res/drawable-v21/btn_fab_default.xml
用于适配5.0和res/drawable/btn_fab_default.xml
用于适配5.0以下的安卓版本。因为5.0以下无法使用elevation
这个新特性。
1 2 3 4 5 6 7 8 9 10 11
| <?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@color/fab_color_shadow" > <item> <shape android:shape="oval"> <solid android:color="@color/style_color_accent"/> </shape> </item> </ripple>
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| <?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="false"> <layer-list> <item android:bottom="0dp" android:left="2dp" android:top="2dp"> <shape android:shape="oval"> <solid android:color="@color/fab_color_shadow" /> </shape> </item> <item android:bottom="2dp" android:left="2dp" android:right="2dp" android:top="2dp"> <shape android:shape="oval"> <solid android:color="@color/style_color_accent" /> </shape> </item> </layer-list>
</item> <item android:state_pressed="true"> <shape android:bottom="2dp" android:left="2dp" android:right="2dp" android:shape="oval" android:top="2dp"> <solid android:color="@color/fab_color_pressed" /> </shape> </item> </selector>
|
其中上面有用到一些颜色值,定义如下:
1 2 3 4 5 6 7 8 9
| <?xml version="1.0" encoding="utf-8"?>
<resources> <color name="style_color_accent">#01bcd5</color>
<color name="fab_color_pressed">#007787</color> <color name="fab_color_shadow">#44000000</color> </resources>
|
这样就完成了,运行一下看看效果: