Snackbar 呢,是 Android 官方的一个控件,它可以说跟 Toast 类似,在应用交互中给用户以友好提示的控件。
它通常出现屏幕底部,给予用户简短的提示消息。它出现在屏幕所有元素之上,且一次只显示一个。
它相对 Toast 还有个很大的不同点,它能提供相关操作的轻量反馈,也就是说它可以点击,通过 setAction 方法去设置相关响应动作。
总之,这个控件呢,在项目中还挺实用的,开始实践一下吧。
implementation "com.google.android.material:$latest_version"
Snackbar.make(binding.root, "This is a snackbar message", Snackbar.LENGTH_SHORT).show()
这里随机在一个按钮点击时间里面调用,点击了按钮会在屏幕底部弹出:
snackbar
它也可以设置显示时间,点到源码可以看到,duration 有三种:
duration
还有个可选是不定,那意思就是,可以自定义喽。666~
上述只是最最最简单的使用 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 规范:
https://m2.material.io/components/snackbars
我们在设计之初也应该参考下它的规范,避免一些不恰当设计使用。
Snackbar类:
https://developer.android.com/reference/com/google/android/material/snackbar/Snackbar