您的位置:

浮动操作按钮(floatingactionbutton)简介及使用案例

浮动操作按钮,英文名为FloatingActionButton(FAB),是一种用于现代应用界面设计的组件。它是由 Google Material Design 提出的一种设计理念,旨在提高用户体验和应用界面的美观程度。本文将从以下几个方面详细介绍浮动操作按钮的相关内容:

一、浮动操作按钮的基本用途

浮动操作按钮在应用中的基本用途是提供一种方便快捷的交互方式,通常被用于实现一些常见的操作按钮,譬如:打电话、发邮件、分享、发布内容等。它和传统的操作按钮不同的是:浮动操作按钮总是悬浮在应用界面的某个角落,而且它的背景色彩比其他部分更加醒目,因此在用户界面中非常显眼,可以引导用户进行某些特定的操作。

二、浮动操作按钮的实现方式

在 Android 平台上,开发者可通过使用 Support 库中的 FloatingActionButton 组件实现浮动操作按钮的效果。下面是一份简单的 XML 布局文件,展示了浮动操作按钮的基本实现方式:

<android.support.design.widget.FloatingActionButton
    android:id="@+id/floatingActionButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom|end"
    android:src="@drawable/ic_add"
    app:backgroundTint="@color/colorPrimary"
    app:fabSize="normal" />

其中,属性 app:backgroundTint 设置浮动按钮的背景色;app:fabSize 设置浮动按钮的大小;android:src 设置浮动按钮里面的图标;android:layout_gravity 设置浮动按钮在布局中的位置(bottom|end 表示位于布局的右下角)。

三、浮动操作按钮的使用场景

浮动操作按钮常常被应用在需要强调操作的场景中,让用户直接进行交互,不用再每次都进入某个页面的操作菜单里才能执行操作。比如在新闻应用中,当用户阅读一篇文章后,可以直接使用浮动操作按钮分享该文章给社交媒体的好友;在个人资料页面中,可以使用浮动操作按钮来实现编辑用户个人主页的功能;在某些需要发表文章或评论的页面中,可以使用浮动操作按钮来快速发布新的内容。

四、浮动操作按钮的推荐实践

为了让浮动操作按钮更加符合用户的使用体验,有以下几种推荐实践:

1、让浮动操作按钮具有一定的悬浮感

为了让浮动操作按钮在应用界面中具有一定的悬浮感,可以将其边缘设置为圆角,让它看起来更像一个悬浮在空中的按钮。

<android.support.design.widget.FloatingActionButton
    ...
    app:elevation="6dp"
    app:pressedTranslationZ="12dp"
    app:shapeAppearance="@style/FloatingButtonShape" />

<style name="FloatingButtonShape">
    <item name="cornerFamily">rounded
    <item name="cornerSize">50%
</style>

2、让浮动操作按钮的背景色更加显眼

为了让浮动操作按钮在应用界面中更加显眼,可以将其背景色设置成应用中使用较多的色调,如主色调或强调色调。

<android.support.design.widget.FloatingActionButton
    ...
    app:backgroundTint="@color/colorAccent"
    app:rippleColor="@color/colorAccentDark" />

3、让浮动操作按钮的交互体验更加丰富

除了实现基本的点击事件外,还可以让浮动操作按钮实现一些交互体验更加丰富的功能,比如在用户点击按钮时显示菜单选项,或者在按钮点击后实现动画效果等。

FloatActionButton floatingActionButton = findViewById(R.id.floatingActionButton);
floatingActionButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if (isExpanded) {
            collapse();
        } else {
            expand();
        }
        isExpanded = !isExpanded;
    }
});

上述代码实现了一个点击浮动操作按钮后,会弹出一些子菜单选项的样例,具有一定的交互效果。

五、浮动操作按钮的使用案例

下面是一个简单的浮动操作按钮的实现案例,请仔细查看代码实现方式、布局和样式设置:

public class MainActivity extends AppCompatActivity {

    private boolean isExpanded = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final LinearLayout layout1 = findViewById(R.id.layout1);
        final LinearLayout layout2 = findViewById(R.id.layout2);
        final LinearLayout layout3 = findViewById(R.id.layout3);

        FloatingActionButton floatingActionButton = findViewById(R.id.floatingActionButton);
        floatingActionButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (isExpanded) {
                    collapse(layout1, layout2, layout3);
                } else {
                    expand(layout1, layout2, layout3);
                }
                isExpanded = !isExpanded;
            }
        });
    }

    private void expand(LinearLayout layout1, LinearLayout layout2, LinearLayout layout3) {
        animate(layout1, 0);
        animate(layout2, getResources().getDimensionPixelSize(R.dimen.standard_55));
        animate(layout3, getResources().getDimensionPixelSize(R.dimen.standard_105));
    }

    private void collapse(LinearLayout layout1, LinearLayout layout2, LinearLayout layout3) {
        animate(layout1, 0);
        animate(layout2, 0);
        animate(layout3, 0);
    }

    private void animate(LinearLayout layout, int translationY) {
        layout.animate().translationY(translationY).setInterpolator(new DecelerateInterpolator(2)).start();
    }
}

在布局文件中,我们需要使用 RelativeLayout 布局来放置三个 LinearLayout 并设置好这三个 LinearLayout 的初始位置。在代码中,我们通过监听浮动操作按钮的点击事件,实现了一个简单的展开/收起动画效果,在用户快速点击浮动操作按钮时,三个 LinearLayout 会从按钮下方分别展开或者收起。