Android 关于 Snackbar 基本使用

448 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第2天,点击查看活动详情

Snackbar 呢,是 Android 官方的一个控件,它可以说跟 Toast 类似,在应用交互中给用户以友好提示的控件。

它通常出现屏幕底部,给予用户简短的提示消息。它出现在屏幕所有元素之上,且一次只显示一个。

它相对 Toast 还有个很大的不同点,它能提供相关操作的轻量反馈,也就是说它可以点击,通过 setAction 方法去设置相关响应动作。

总之,这个控件呢,在项目中还挺实用的,开始实践一下吧。

一、Snackbar 基本使用

  • 先在app build.gradle 中添加依赖:
implementation "com.google.android.material:$latest_version" 
  • 然后在代码中使用(简单使用跟Toast是类似的):
 Snackbar.make(binding.root, "This is a snackbar message", Snackbar.LENGTH_SHORT).show()

这里随机在一个按钮点击时间里面调用,点击了按钮会在屏幕底部弹出:

snackbar

它也可以设置显示时间,点到源码可以看到,duration 有三种:

duration

还有个可选是不定,那意思就是,可以自定义喽。666~

二、给 Snackbar 添加点花样

上述只是最最最简单的使用 Snackbar,如果只是弹出提示,那显然 Toast 已经够了,它肯定是提供了 Toast 不具备的功能的,接下来开始实践一下吧。

setAction() : 设置Snackbar右侧按钮,增加进行交互事件。

Snackbar.make(binding.root, "Show some message here", Snackbar.LENGTH_SHORT).setAction(
                "Action"
            ) { Toast.makeText(this@CallBoardActivity"您点击了 Snackbar 的 Action", Toast.LENGTH_LONG).show() }.show()

setAction1

setAction2

setBackgroundTint(): 给 Snackbar 设置背景颜色

setActionTextColor(): 给 Snackbar Action 文字设置颜色

setTextColor(): 给 Snackbar 文字设置颜色

Snackbar.make(binding.root, "Show some message here", Snackbar.LENGTH_SHORT)
                .setBackgroundTint(ContextCompat.getColor(this, R.color.baseCyan))
                .setActionTextColor(ContextCompat.getColor(this, R.color.white))
                .setTextColor(ContextCompat.getColor(this,R.color.black))
                .setAction(
                "Action"
            ) { Toast.makeText(this@CallBoardActivity"您点击了 Snackbar 的 Action", Toast.LENGTH_LONG).show() }
                .show()

运行:

addCallback(): 给 snackbar 添加了个回调,回调 Snackbar 弹出和关闭动作。有需求可以添加一下,做个演示。

Snackbar.make(binding.root, "Show some message here", Snackbar.LENGTH_SHORT).addCallback(object : Callback(){
                override fun onShown(sb: Snackbar?) {
                    super.onShown(sb)
                    Log.d("yyyyy""onShown")
                }

                override fun onDismissed(transientBottomBar: Snackbar?, event: Int) {
                    super.onDismissed(transientBottomBar, event)
                    Log.d("yyyyy""onDismissed")
                }
            }).show()

log

从日志的打印结果还可以看出,给 snackbar 的 duration 设置成 LENGTH_SHORT,它的显示时间大概是 3 秒。啧啧啧~

当然,官方还提供了一些方法,给 Snackbar 设置那么点花样,具体还是看需求吧,它能提供的方法也不很多,更为复杂点大概还是需要自定义,下一期再来研究下自定义 Snackbar 吧。


Snackbar Material Design 规范:

m2.material.io/components/…

我们在设计之初也应该参考下它的规范,避免一些不恰当设计使用。

Snackbar类:

developer.android.com/reference/c…


🌈关注我吖~❤️

公众号:妮K妮K妮