Android Snackbar用法详解

一、概述

Snackbar 是 Android 提供的一种简洁、轻量级的提示框,用于在屏幕底部展示短暂的信息提示。它的设计初衷是为了提供一种比 Toast 更具互动性和灵活性的提示方式。与 Toast 的静态提示不同,Snackbar 提供了更多的交互功能,例如:支持撤销操作、自动隐藏和手动关闭。

Snackbar 适用于展示短期通知,尤其是需要用户进行交互(如撤销操作)的场景。


二、Snackbar 与 Toast 的对比

特性SnackbarToast
显示位置屏幕底部屏幕中间或底部
显示时间可定制(一般显示 2-3 秒)自动消失(一般 2-3 秒)
可交互性支持按钮操作(如撤销)无法交互
可以设置自定义动作可以添加撤销按钮、动作只能显示文本

Snackbar 的主要优势在于支持交互操作和自定义动作,比如用户可以点击“撤销”按钮撤回某个操作,而 Toast 仅是展示提示信息并自动消失。


三、Snackbar 基本使用

1. 导入必要的依赖

在使用 Snackbar 之前,首先需要确保你的项目已经包含了 Material Components 库:

plaintext

1
2
3
gradle复制编辑dependencies {
    implementation 'com.google.android.material:material:1.4.0'
}

2. 显示简单的 Snackbar

最简单的 Snackbar 只需要传入要显示的文本,它会自动显示在屏幕底部:

plaintext

1
2
val rootView: View = findViewById(R.id.root_view)
Snackbar.make(rootView, "操作成功", Snackbar.LENGTH_SHORT).show()
  • 参数解释
    • rootViewSnackbar 将依附在这个视图上,通常选择根视图(rootView)作为容器。
    • "操作成功":要展示的文本。
    • Snackbar.LENGTH_SHORT:显示的时长。也可以选择 LENGTH_LONG 或 LENGTH_INDEFINITE(无限显示,直到用户主动消失)。

四、Snackbar 进阶使用

1. 添加操作按钮(交互性)

可以为 Snackbar 添加一个操作按钮,让用户能够执行一些动作,例如撤销删除操作:

plaintext

1
2
3
4
5
6
7
val rootView: View = findViewById(R.id.root_view)
Snackbar.make(rootView, "操作成功", Snackbar.LENGTH_LONG)
    .setAction("撤销") {
        // 执行撤销操作
        Toast.makeText(this, "撤销操作", Toast.LENGTH_SHORT).show()
    }
    .show()
  • setAction():添加一个按钮及其点击事件。在这里,我们添加了“撤销”按钮,点击时会显示一个提示。
  • setActionTextColor():可以用来设置按钮文本的颜色。

2. 修改 Snackbar 样式

Snackbar 还支持自定义样式,例如背景色、文本颜色等:

plaintext

1
2
3
4
5
6
7
8
9
val rootView: View = findViewById(R.id.root_view)
val snackbar = Snackbar.make(rootView, "操作成功", Snackbar.LENGTH_LONG)

val snackbarView = snackbar.view
snackbarView.setBackgroundColor(ContextCompat.getColor(this, R.color.snackbar_background))
val textView = snackbarView.findViewById<TextView>(com.google.android.material.R.id.snackbar_text)
textView.setTextColor(Color.WHITE)

snackbar.show()
  • 通过 snackbar.view 获取到 Snackbar 的根视图,进一步定制 Snackbar 的样式。
  • setBackgroundColor() 可以修改 Snackbar 背景色。
  • findViewById<TextView>(com.google.android.material.R.id.snackbar_text) 获取到文本视图,修改文本颜色。

3. 设置自定义动画

Snackbar 的出现与消失是有默认动画的,你也可以自定义动画效果:

plaintext

1
2
3
val snackbar = Snackbar.make(rootView, "操作成功", Snackbar.LENGTH_LONG)
snackbar.view.animation = AnimationUtils.loadAnimation(this, R.anim.snackbar_animation)
snackbar.show()
  • 通过 snackbar.view.animation 设置自定义动画,可以配合自己的动画资源文件进行定制。

五、Snackbar 的生命周期

Snackbar 的生命周期由三部分组成:显示、消失与撤销。

  1. 显示Snackbar 会在短时间内显示在屏幕底部。
  2. 自动消失:根据传入的显示时间(LENGTH_SHORTLENGTH_LONG 等),Snackbar 会自动消失。
  3. 手动消失:如果你需要手动关闭 Snackbar,可以使用 dismiss() 方法:

plaintext

1
snackbar.dismiss()
  1. 撤销操作:通过 setAction() 方法,可以为 Snackbar 添加交互操作,允许用户点击撤销等按钮。

六、Snackbar 的注意事项

  1. 嵌套使用:在一个 Activity 或 Fragment 中,Snackbar 不应嵌套多个使用。如果需要显示多个提示信息,建议先调用 dismiss() 手动关闭前一个 Snackbar
  2. 与键盘交互Snackbar 会随着键盘的弹出自动调整位置,因此通常不会被键盘遮挡。
  3. 长时间显示:如果你使用 Snackbar.LENGTH_INDEFINITE 长时间显示 Snackbar,记得调用 dismiss() 关闭 Snackbar,以免一直显示在屏幕上。
  4. 适应不同屏幕:由于 Snackbar 是一个浮动视图,它不会占用布局中的空间,因此对于小屏设备,建议不要让 Snackbar 显示过长时间,避免遮挡重要内容。

七、总结

Snackbar 是一种非常适合在 Android 中展示短暂提示信息的控件,特别适用于需要用户交互(如撤销)的场景。通过简单的 API,开发者可以实现丰富的提示功能,改善用户体验。

优点:

  • 显示简洁
  • 可以进行交互操作(如撤销)
  • 灵活的自定义样式

缺点:

  • 适用于短期提示,不适合长时间显示
  • 需要手动管理显示时长和行为

Snackbar 是一个高效的界面提示工具,能够让用户快速理解应用状态,同时保持界面的整洁和简洁。希望本文能够帮助你更好地理解和使用 Snackbar,从而提高用户体验。如果你有任何问题,或者需要更深入的实例演示,欢迎随时向我提问!

举例

在我的例子中,是点击一个fab换起Snackbar,其中亮点是强制改变了Snackbar的背景和字体的颜色。

plaintext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
binding.fab.setOnClickListener { view ->
    val snackbar = Snackbar.make(view, "Data deleted", Snackbar.LENGTH_SHORT)
        .setAction("Undo") {
            Toast.makeText(this, "Data restored", Toast.LENGTH_SHORT).show()
        }

    //获取 Snackbar 的 View 并设置 tintList 强制背景为白色.tiniList超级超级超级级厉害的,能强制修改颜色,
    //可用在button,ImageView,FloatingActionButton,但不能用在popupmenu上,修改popupmenu需要在value中定义style,然后在layout中使用这个style
    val snackbarView = snackbar.view
    snackbarView.backgroundTintList = ColorStateList.valueOf(Color.WHITE)

    // 设置文字为黑色
    val textView = snackbarView.findViewById<TextView>(com.google.android.material.R.id.snackbar_text)
    textView?.setTextColor(Color.BLACK)

    // 设置 Action 按钮的颜色(这里示例用黑色,你可以换成其它颜色)
    val actionTextView = snackbarView.findViewById<TextView>(com.google.android.material.R.id.snackbar_action)
    actionTextView?.setTextColor(Color.BLUE)

    snackbar.show()
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值