Android Studio初学笔记-Day24-FloatButton和SnackBar

FloatButton和Snackbar

FloatButton是漂浮式按钮,也可以说是不同种设计的Button,因为它基本上设定也就跟Button是大同小异的,不过它也可以帮忙在未来设计Button的时候有更多不一样的变化,而Snackbar则可以说是Toast的亲戚,所以我今天将带大家了解这两个元件和之前所介绍过的有甚麽不同之处。

activity_main.xml的布局档

<androidx.coordinatorlayout.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/coordinatorLayout"
    tools:context=".MainActivity">

    <com.google.android.material.floatingactionbutton.FloatingActionButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|end"
        android:layout_margin="16dp"
        android:onClick="open"
        android:src="@drawable/ic_baseline_done_24"
        app:backgroundTint="@color/purple_200"
        app:elevation="6dp"
        app:pressedTranslationZ="12dp"
        app:fabSize="normal" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>

可以看到很简单的加入一个FloatButton而已,大部分设定也跟Button差不多,以下我稍微讲解不同的设定。

  • android:src :
    负责设定图片
  • backgroundTint:
    设置按钮的颜色
  • elevation:
    设置阴影,制造立体感,默认爲6dp
  • pressedTranslationZ:
    设置点击时的阴影大小,默认是12dp
  • fabSize:
    设置FloatingActionButton的大小,可以设定为normal的正常尺寸(56dp)或mini较小的尺寸(40dp)

不过这里要注意的是,因为我将与Snackbar做结合,所以改变了最外层的Layout变成CoordinatorLayout并加上了id,我也将在最後展现CoordinatorLayout的效果,这里先注意到即可。

Snackbar的使用

public class MainActivity extends AppCompatActivity {
    CoordinatorLayout coordinatorLayout;

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

        coordinatorLayout = (CoordinatorLayout)findViewById(R.id.coordinatorLayout);
    }

    public void open(View v) {
        Snackbar.make(coordinatorLayout, "我是Snackbar", Snackbar.LENGTH_LONG)
                .setAction("按我一下", new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        // 点击讯息时要执行的动作
                        Toast.makeText(MainActivity.this, "你按了 Snackbar", 
                                        Toast.LENGTH_SHORT).show();
                    }
                })
                .setActionTextColor(Color.YELLOW)    // 可以指定文字颜色
                .show();
    }
}

我在Snackbar加上了按钮,这也是跟Toast不一样的地方,这里我让按钮的功能为产生Toast,可以藉此比较一下两者的相似之处,不过也可以不加上按钮,把setAction移除即可,一样可以产生Snackbar,而Snackbar还有一个特点是能当Snackbar产生时,右滑即可移除,最後看一下效果和CoordinatorLayout能让两者不重叠的特色。

成果

https://ithelp.ithome.com.tw/upload/images/20210908/20139136UMY5O0eLVb.png
https://ithelp.ithome.com.tw/upload/images/20210908/20139136ciUe5GoM6K.png

可以看见Snackbar将FloatButton往上推,这就是CoordinatorLayout的效果,是不是挺不错的呢。
今天FloatButton和Snackbar就讲到这边,谢谢大家~/images/emoticon/emoticon41.gif


<<:  用科学化除错方法替你的 zk 程序除错之一

>>:  Day 25 | 使用ManoMotion制作Flappy Bird游戏 Part1 - 障碍物山的移动与产生

予焦啦!一梦终须醒......

佳作之後 承蒙评审给予肯定,最直接的感谢方式就是狗尾续貂一番。 沈淀了一个多月,我时常咀嚼结语中故作...

【JavaScript】检查Array阵列的各种方式

本篇搭配 LeetCode 1.Two Sum 题目: Given an array of inte...

Leetcode 挑战 Day 13 [13. Roman to Integer]

13. Roman to Integer 今天我们一起挑战leetcode第13题Roman to ...

【课程推荐】2021/3/6~3/7、3/13~3/14 软件架构师技能培训班

课程目标 了解软件架构师所应具备的技能与素养,分析与规划软件架构模型,撰写符合国际标准的SAD (S...

[Day04] TS:如何把物件型别的所有属性名称取出变成 union type?试试看 keyof 吧!

前面两天的文章中我们谈到泛型(generics)的使用,以及如何透过 extends 来限制泛型可被...