Android Design Support Library全解:Part 1 Floating Action Button 悬浮按钮

简介: Android Design Support Library系列第一弹,悬浮按钮悬浮按钮(Floating action button ,FAB) 简单来说是一种圆形按钮,其悬浮于UI之上,四周有阴影环绕,可以用于实现一些高级操作,比如添加新的条目,或是为邮件添加附件等等。

Android Design Support Library系列第一弹,悬浮按钮

悬浮按钮(Floating action button ,FAB) 简单来说是一种圆形按钮,其悬浮于UI之上,四周有阴影环绕,可以用于实现一些高级操作,比如添加新的条目,或是为邮件添加附件等等。

FAB1
FAB2

就本质而言,FAB其实就是继承于ImageView的控件,其支持所有ImageView和ImageButton的属性。

FAB继承自ImageView

要使用FAB,首先要添加依赖包:

//本文撰写时,最新版本是25.3.1
compile 'com.android.support:design:25.3.1'

第一步:

在layout文件中加入FAB,我们假设已经声明了命名空间xmlns:app=”http://schemas.android.com/apk/res-auto

<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>

需要说明的是,因为经常需要FAB悬浮于整个UI界面,所以一般将其单独放入一个FrameLayout中,FrameLayout会覆盖下面的UI界面,这样便于FAB位置的设置。

FAB属性介绍

  • 背景填充色: 默认情况下,FAB的填充色为style.xml中colorAccent定义的颜色,如有需要可以设置属性**app:backgroundTint **来自定义背景填充色;
  • 尺寸大小:FAB设有三种尺寸,标准尺寸(Normal 56dp),迷你尺寸(Mini 40dp),以及自适应尺寸(基于屏幕大小而变化),用户通过app:fabSize来设定;
    fabSize
  • 波纹颜色:app:rippleColor属性用来控制当FAB按下后,产生波纹效果的颜色;
  • 阴影尺寸:app:elevation属性用来控制FAB在正常状态下阴影的尺寸,默认6dp;
  • 按下阴影:app:pressedTranslationZ属性用来控制FAB在按下时阴影的打下,默认12dp;

第二步

根据属性的介绍,完善FAB的设置:

   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"/>

第三步

在Activity中设置点击事件:

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();
   }
});

和一般的Button的设置点击事件是一样的,使用起来很方面。

需要注意问题

FAB的呈现的效果在Android 4.4 和4.4以上的设备并不相同:

Android 5

Android 4.4

通过上面的对比图可以看出来效果的差异,Android 4.4上 FAB会有边距,而起有默认的阴影,但是4.4+设备没有边框和设备。

解决边距

为了结局边框的问题,可以为4.4+设备设置边框距离,而4.4及之前的设备,边距设为0。

  • 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"/>

这样设备就会选取符合系统版本的边距值来设置。

解决阴影

为了统一阴影的大小,可以在布局文件中利用app:borderWidth属性,统一设置阴影大小。

<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"/>

动画问题

在最初,旋转动画RotateAnimation无法应用在FAB上,但是属性动画出现之后解决了这个问题。

btnFab = (FloatingActionButton) findViewById(R.id.btnFloatingAction);
btnFab.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        Toast.makeText(FloatingActionButtonActivity.this, "Hello FAB!", Toast.LENGTH_SHORT).show();
//设置属性动画,旋转
        ObjectAnimator animator = ObjectAnimator.ofFloat(btnFab,"rotation",0f,360f);
        animator.setInterpolator(new FastOutLinearInInterpolator());
        animator.setDuration(1000).start();
    }
});

更多关于属性动画对内容,请阅读这里

相关参考

https://developer.android.com/reference/android/support/design/widget/FloatingActionButton.html

相关文章
|
7月前
|
测试技术 Android开发
Android按钮防抖动,避免发送多次请求
Android按钮防抖动,避免发送多次请求
125 0
|
7月前
|
Java Android开发
Android Studio入门之按钮触控的解析及实战(附源码 超详细必看)(包括按钮控件、点击和长按事件、禁用与恢复按钮)
Android Studio入门之按钮触控的解析及实战(附源码 超详细必看)(包括按钮控件、点击和长按事件、禁用与恢复按钮)
765 0
|
7月前
|
Android开发
Android Studio入门之图像显示解析及实战(附源码 超详细必看)(包括图像视图、图像按钮、同时展示文本与图像)
Android Studio入门之图像显示解析及实战(附源码 超详细必看)(包括图像视图、图像按钮、同时展示文本与图像)
294 1
|
3月前
|
XML Android开发 UED
💥Android UI设计新风尚!掌握Material Design精髓,让你的界面颜值爆表!🎨
随着移动应用市场的蓬勃发展,用户对界面设计的要求日益提高。为此,掌握由Google推出的Material Design设计语言成为提升应用颜值和用户体验的关键。本文将带你深入了解Material Design的核心原则,如真实感、统一性和创新性,并通过丰富的组件库及示例代码,助你轻松打造美观且一致的应用界面。无论是色彩搭配还是动画效果,Material Design都能为你的Android应用增添无限魅力。
81 1
|
5月前
|
XML Android开发 UED
💥Android UI设计新风尚!掌握Material Design精髓,让你的界面颜值爆表!🎨
【7月更文挑战第28天】随着移动应用市场的发展,用户对界面设计的要求不断提高。Material Design是由Google推出的设计语言,强调真实感、统一性和创新性,通过模拟纸张和墨水的物理属性创造沉浸式体验。它注重色彩、排版、图标和布局的一致性,确保跨设备的统一视觉风格。Android Studio提供了丰富的Material Design组件库,如按钮、卡片等,易于使用且美观。
167 1
|
4月前
|
Android开发
Android项目架构设计问题之定义一个关闭当前页面的Action如何解决
Android项目架构设计问题之定义一个关闭当前页面的Action如何解决
20 0
|
6月前
|
XML IDE 开发工具
【Android UI】自定义带按钮的标题栏
【Android UI】自定义带按钮的标题栏
65 7
【Android UI】自定义带按钮的标题栏
|
6月前
|
安全 JavaScript 前端开发
kotlin开发安卓app,JetPack Compose框架,给webview新增一个按钮,点击刷新网页
在Kotlin中开发Android应用,使用Jetpack Compose框架时,可以通过添加一个按钮到TopAppBar来实现WebView页面的刷新功能。按钮位于右上角,点击后调用`webViewState?.reload()`来刷新网页内容。以下是代码摘要:
|
6月前
|
存储 Android开发
安卓app,MediaPlayer播放本地音频 | 按钮控制播放和停止
在Jetpack Compose中,不直接操作原生Android组件如`Button`和`MediaPlayer`,而是使用Compose UI构建器定义界面并结合ViewModel管理音频播放逻辑。以下示例展示如何播放本地音频并用按钮控制播放/停止:创建一个`AudioPlayerViewModel`管理`MediaPlayer`实例和播放状态,然后在Compose UI中使用`Button`根据`isPlaying`状态控制播放。记得在`MainActivity`设置Compose UI,并处理相关依赖和权限。
|
6月前
|
XML Java Android开发
15. 【Android教程】按钮 Button/ImageButton
15. 【Android教程】按钮 Button/ImageButton
91 2