目录
Snackbar 简介
Snackbar 特性
完整Demo
Snackbar 简介
Snackbar 是 Android5.0 新特性---Material Design 中的一个控件,用来代替 Toast。Snackbar 就是一个类似 Toast 的快速弹出消息提示的控件,手机上显示在底部,大屏幕设备显示在左侧。但是在显示比 Toast 丰富,也提供了用于用户交互的接口。
Snackbar 是介于 Toast 与 Dialog 之间的。功能要比 Toast 强一些比 Dialog 弱一些。Snsckbar 与 Toast 的主要区别是:Snackbar 可以滑动退出,也可以处理用户交互(点击事件)。总之 Toast 能做的,Snackbar 也能做而且部分功能能做的更好,比如显示时长,Toast 最多 3 秒而 Snackbar 可以自定义时长。
Snackbar 特性
屏幕上同时最多只能显示一个 Snackbar;
可以在 Snackbar 中添加一个按钮,处理用户点击事件;
Snackbar 一般需要需要 CoordinatorLayout 来作为父容器,CoordinatorLayout 保证 Snackbar 可以右滑退出;
Snackbar 出现时不会阻碍用户在屏幕上的输入;
Snackbar 可以自定义时长;
可以监听显示隐藏事件,便于用户操作更多;
完整Demo
xml 代码
<?xml version="1.0" encoding="utf-8"?>
<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:fitsSystemWindows="true"tools:context=".MainActivity"><LinearLayoutandroid:id="@+id/ll_top"android:fitsSystemWindows="true"android:layout_width="match_parent"android:layout_height="200dp"android:background="@color/purple_200"android:orientation="horizontal"><TextViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center"android:text="您好啊!"android:textSize="25sp" /></LinearLayout><com.google.android.material.floatingactionbutton.FloatingActionButtonandroid:id="@+id/fab"android:layout_width="wrap_content"android:layout_height="wrap_content"app:layout_anchor="@id/ll_top"app:layout_anchorGravity="center|bottom"android:src="@drawable/ic_baseline_done_64"android:backgroundTint="#43d28d"app:borderWidth="0dp"android:elevation="6dp"app:fabSize="normal"app:rippleColor="#43d28d"/></androidx.coordinatorlayout.widget.CoordinatorLayout>
在上面的 xml 里,可以发现是没有 Snackbar 这个控件的,但是我们却完成了 Snackbar 的使用。所以,不 Snackbar 与 Toast 一样直接在代码里调用。
Snackbar.make(v, "还我星星", Snackbar.LENGTH_LONG).setAction("取消", v1 -> {Toast.makeText(this, "取消", Toast.LENGTH_SHORT).show();}).show();
完整代码:
package com.example.snackbar;import androidx.appcompat.app.AppCompatActivity;import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;import com.example.snackbar.databinding.ActivityMainBinding;
import com.google.android.material.snackbar.Snackbar;public class MainActivity extends AppCompatActivity {private ActivityMainBinding binding;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);binding = ActivityMainBinding.inflate(getLayoutInflater());setContentView(binding.getRoot());getWindow().setStatusBarColor(Color.TRANSPARENT);binding.fab.setOnClickListener(v -> {Snackbar.make(v, "还我星星", Snackbar.LENGTH_LONG).setAction("取消", v1 -> {Toast.makeText(this, "取消", Toast.LENGTH_SHORT).show();}).show();});}
}
参考博客:谁抢我的小口口 的SCDN