前言

Snackbars 在 Android 应用程序中很常见。几乎每个应用程序都使用 Snackbars 来显示有关应用程序中正在发生的事情的一些信息。您可以将 Snackbar 视为 Android 中 Toasts 的替代品或更好的版本。

默认情况下,Snackbar 显示在屏幕底部,它出现在屏幕上所有元素的顶部。它与某些视图相关联,并且仅当视图在屏幕上时才会显示 Snackbar。

所以,总的来说,我们可以说 Snackbars 很棒。但是为了将这种令人敬畏的感觉提升到一个新的水平,我们可以根据我们的需要自定义 Snackbar。在本博客中,我们将学习如何在 Android 中制作自定义 Snackbar。所以,让我们开始使用普通的 Snackbar。

使用普通 Snackbar

要在您的应用程序中使用 Snackbar,您需要做的就是在您的应用程序中拥有 Material Design 依赖项。build.gradle因此,在您的文件中添加以下依赖项:

implementation "com.google.android.material:$latest_version"

然后你可以像 Toast 一样使用 Snackbar。例如:

Snackbar.make(view, "Show some message here", Snackbar.LENGTH_SHORT).show()

上面的代码将在 Snackbar 中显示一条简单的消息。Snackbar 提供了一些功能。例如:

  • setAction():这可用于对 Snackbar 进行一些操作。例如,您可以使用 Snackbar 来显示网络错误消息并执行名为 Retry 的操作。
  • setBackgroundColor():这可以用来改变 Snackbar 的背景颜色。
  • setAnchorView():默认情况下,Snackbar 出现在屏幕底部。setAnchorView但是你可以在函数的帮助下改变它的位置。

还有其他功能可以与 Snackbar 一起使用。

定制Snackbar

现在,是时候创建我们自己的 Snackbar 了。

所以,我们要做的第一件事就是为 Snackbar 创建一个自定义布局。因此,为此,我们需要创建一些文件。创建两个名为CustomSnackbar和的类CustomSnackbarView。创建两个名为item_custom_snackbar和的 XML 文件layout_custom_snackbar

item_custom_snackbar包含 Snackbar 的元素。在这里,我们将在 Snackbar 中拥有一个文本视图和一个图像视图。您可以根据需要更改 UI。因此,将的代码item_custom_snackbar是:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="60dp"><ImageViewandroid:id="@+id/ivCheck"android:layout_width="60dp"android:layout_height="match_parent"android:src="@drawable/ic_check_circle"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintTop_toTopOf="parent" /><TextViewandroid:id="@+id/tvMessage"android:layout_width="0dp"android:layout_height="match_parent"android:gravity="center_vertical"android:padding="8dp"android:text="Payment Successful!"android:textSize="30sp"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toStartOf="@+id/ivCheck"app:layout_constraintStart_toStartOf="parent" /></androidx.constraintlayout.widget.ConstraintLayout>

现在,要创建自定义 Snackbar 视图,您需要实现ContentViewCallback。这用于告诉 Snackbar 的内容何时开始出现以及何时从屏幕上消失。因此,将的代码CustomSnackbarView是:

class CustomSnackbarView @JvmOverloads constructor(context: Context,attributeSet: AttributeSet? = null,defaultStyle: Int = 0
) : ConstraintLayout(context, attributeSet, defaultStyle), ContentViewCallback {init {View.inflate(context, R.layout.item_custom_snackbar, this)}override fun animateContentIn(delay: Int, duration: Int) {// TODO("Use some animation")}override fun animateContentOut(delay: Int, duration: Int) {// TODO("Use some animation")}}

在这里,我们有两个函数叫做animateContentInanimateContentOut,它们用于在 Snackbar 的内容出现和从屏幕上消失时有一些动画。

现在,我们的自定义视图已准备就绪,我们可以在任何布局文件中使用此视图。所以,我们将在我们的layout_custom_snackbar 相同的代码将是:

<?xml version="1.0" encoding="utf-8"?>
<com.example.snackbarexample.CustomSnackbarView xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent" />

最后,CustomSnackbar遗嘱的代码是:

class CustomSnackbar(parent: ViewGroup,content: CustomSnackbarView
) : BaseTransientBottomBar<CustomSnackbar>(parent, content, content) {init {getView().setBackgroundColor(ContextCompat.getColor(view.context,android.R.color.transparent))getView().setPadding(0, 0, 0, 0)}companion object {fun make(viewGroup: ViewGroup): CustomSnackbar {val customView = LayoutInflater.from(viewGroup.context).inflate(R.layout.layout_custom_snackbar,viewGroup,false) as CustomSnackbarViewcustomView.tvMessage.text = "Some Custom Message"return CustomSnackbar(viewGroup, customView)}}}

在这里,您可以在代码本身中自定义 Snackbar 的内容,即您可以更改文本消息,也可以更改图像。默认情况下,Snackbar 的背景为灰色。因此,在init区块中,我们已将其设为透明。

现在,您可以通过调用make方法(通过传递父视图组)来使用这个类,就像普通的 Snackbar 一样。例如,您可以通过以下方式调用此类:

CustomSnackbar.make(window.decorView.rootView as ViewGroup).show()

这就像调用一个普通的 Snackbar 一样简单。这是您使用上述代码时得到的结果:

这样你可以通过这种方式,制作自己的自定义 Snackbar。

Android 中的自定义 Snackbar相关推荐

  1. 如何在android中创建自定义对话框?

    本文翻译自:How to create a Custom Dialog box in android? I want to create a custom dialog box like below ...

  2. android 使用 系统字体,Android_解析Android中使用自定义字体的实现方法,1、Android系统默认支持三种字 - phpStudy...

    解析Android中使用自定义字体的实现方法 1.Android系统默认支持三种字体,分别为:"sans", "serif", "monospace ...

  3. android设置主题的方法,Android_修改Android App样式风格的方法,android中可以自定义主题和风格 - phpStudy...

    修改Android App样式风格的方法 android中可以自定义主题和风格.风格,也就是style,我们可以将一些统一的属性拿出来,比方说,长,宽,字体大小,字体颜色等等.可以在res/value ...

  4. 浅谈android中的自定义封装易用的Dialog

    转载地址:http://blog.csdn.net/u013064109/article/details/51990526 好久没写Android的博客,最近在做一个android的项目,里面用到我们 ...

  5. Android中的自定义View(一)

    文章收藏的好句子:成功从来不是一蹴而就,而是日积月累的努力叠加的结果. ps:本文是基于 Android API 31 来分析的,文章写的 demo 是用 AndroidStudio 工具来开发的. ...

  6. Android中的自定义View以及绘图工具

    1.1自定义view的简介 为什么要使用自定义view 在Android开发中有很多业务场景,原生的控件是无法满足应用,并且经常也会遇到一个UI在多处 重复使用情况,那么就需要通过自定义View的方式 ...

  7. Android中的自定义view和自定义属性TypedArray的使用

    先总结下自定义View的步骤: 1.自定义View的属性 2.在View的构造方法中获得我们自定义的属性 [ 3.重写onMesure ] 4.重写onDraw 我把3用[]标出了,所以说3不一定是必 ...

  8. Android中实现自定义View组件并使其能跟随鼠标移动

    场景 实现效果如下 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书.教程推送与免费下载. 实现 新建An ...

  9. android 日历图,Android中的自定义日历视图

    我正在为我的 Android应用程序构建一个自定义日历视图,允许您在几个月之间滑动.我已经创建了自定义日历方块视图,我已将其嵌入到自定义日历月视图中,并且所有内容都在1个月的范围内完美运行. 不幸的是 ...

最新文章

  1. SearchHit转成java对象_Java开发中最常犯的10个错误,你中招了吗?
  2. Android底层开发之Audio HAL Android Audio Overview
  3. 计算机视觉Computer Vision网址导航
  4. mongodb之索引学习
  5. 什么是SAP Commerce Cloud OCC
  6. 【t057】任务分配
  7. YbtOJ#20064-[NOIP2020模拟赛B组Day4]预算缩减【树形dp】
  8. 为什么我放弃饿了么产品总监,却要从事自由职业?
  9. c语言sleep函数上限多久解除,关于sleep函数的问题,
  10. 中关村企业 大数据_中关村大数据产业联盟秘书长赵国栋:数字经济区别于传统经济 是企业转型升级的顶层战略...
  11. C++枚举(enum)
  12. JRE 和 JDK历史版本是为了帮助开发
  13. C# 反射/映射学习
  14. PADS2007_教程之PADS LAYOUT
  15. 如何评价@左耳朵耗子 的《关于阿里云经典网络的问题》?
  16. JavaScript封装自己的库
  17. 浏览器插件 - Chrome 对 UserScript 的声明头(metadata)兼容性一览
  18. 个人信贷不良资产管理 难题亟待解决
  19. 14款免费的GIF制作软件(转载)
  20. 分段函数的期望和方差_概率论与数理统计的公式及定义总结

热门文章

  1. 【学习OpenCV4】案例3:OpenCV Python语言开发环境搭建
  2. 【python】使用pip安装指定版本的模块,卸载、查看、更新包
  3. 通过Vim执行Python3脚本遇到的坑
  4. ‘v-model’ directives require no argument
  5. directives 引用this
  6. vue中怎么获取元素
  7. 全世界的程序员们,为什么都不在意“穿衣”这档事?
  8. matlab中字符串和变量一起显示输出eval()函数用法
  9. 韩顺平JAVA-D2
  10. ffmpeg中av_image_alloc()函数的用法 以及 另一种同样功能的函数用法