Android自定义吐司三

前言

`本篇文章主要讲解的有关Android开发中常用的吐司处理方式以及应用。其它相关的内容,可以参考链接


先附上一个超强大的吐司git链接:https://github.com/getActivity/Toaster

下面主要讲解具体的使用方法
先上效果图:
吐司演示视频

一、集成方式

1.将原始的依赖包下载下来,可根据自己的需求进行修改
2.就是在app上的build中添加: implementation 'com.github.getActivity:Toaster:12.6’这种方式可随时更新,但是不能自己修改想要的方式。

二.具体的使用

在自己的XxxApplication中的onCreate()方法中添加: // 初始化 Toast 框架:Toaster.init(this);
1.显示Toast
Toaster.show("这是一个正常的吐司");2.显示短的Toast
Toaster.showShort("这是一个短的吐司");3.显示短长的Toast
Toaster.showLong("这是一个长的吐司");4. debug 模式下显示 Toast
Toaster.debugShow("这是在debug模式下显示的吐司");5.延迟显示的Toast
Toaster.delayedShow("这是在延迟下显示的吐司");6.在子线程中显示的Toastnew Thread(new Runnable() {@Overridepublic void run() {Toaster.show("这是在子线程中显示的吐司");}}).start();7.显示的白色背景的ToastToastParams params = new ToastParams();params.text = getString("这是一个白色背景的吐司");params.style = new WhiteToastStyle();Toaster.show(params);8.显示的黑色背景的ToastToastParams params = new ToastParams();params.text = getString("这是一个黑色背景的吐司");params.style = new BlackToastStyle();Toaster.show(params);9.显示的自定义样式的ToastToastParams params = new ToastParams();params.text = getString("这是一个自定义样式的吐司");params.style = new CustomToastStyle("自定义样式布局的");Toaster.show(params);

三、注意事项以及涉及到的其他第三方框架

1.注意事项

1.Toast 在 Android 7.1 崩溃的问题* 这个问题是由于 Android 7.1 加入 WindowToken 校验机制导致的,而这个 WindowToken 是 NotificationManagerService 生成的,这个 WindowToken 是存在一定时效性的,而当应用的主线程被阻塞时,WindowManager 在 addView 时会对 WindowToken 进行校验,但是 WindowToken 已经过期了,这个时候 addView 就会抛出异常。* 谷歌在 Android 8.0 就修复了这个问题,修复方式十分简单粗暴,就是直接捕获这个异常,而框架的修复思路跟谷歌类似,只不过修复方式不太一样,因为框架无法直接修改系统源码,所以是直接通过 Hook 的方式对异常进行捕获。
2.通知栏权限关闭后 Toast 显示不出来的问题* 这个问题的出现是因为原生 Toast 的显示要通过 NMS(NotificationManagerService) 才会 addView 到 Window 上面,而在 NMS 中有一个 `static final boolean ENABLE_BLOCKED_TOASTS = true` 的字段,当这个常量值为 true 时,会触发 NMS 对应用通知栏权限的检查,如果没有通知栏权限,那么这个 Toast 将会被 NMS 所拦截,并输出 `Suppressing toast from package` 日志信息,而小米手机没有这个问题是因为它是将 `ENABLE_BLOCKED_TOASTS` 字段值修改成 `false`,所以就不会触发对通知栏权限的检查,另外我为什么会知道有这个事情?因为我曾经和一名 MIUI 工程师一起确认过这个事情。* 框架处理这个问题的方式有两种,先判断当前应用是否处于前台状态,如果是则使用自定义的 WindowManager 代替 Toast 来显示,如果当前应用处于后台状态,则会通过 Hook Toast 中的 INotificationManager 接口,将 enqueueToast 方法传递的包名参数修改成 `android` 来欺骗 NotificationManagerService,因为 NotificationManagerService 已经将 `android` 包名的应用纳入白名单,系统会自动放行,需要注意的是,这种方式在 Android 10 上面已经失效了,已经被系统纳入反射黑名单,但是好消息是,通过查看和对比 NotificationManagerService 源码发现,这个问题(关闭通知栏权限后无法在前台弹 Toast 的问题)已经在 Android 10.0 的版本上面被修复了,所以框架只在 Android 9.0 及以下版本并且在关闭了通知栏权限的情况下才去 Hook INotificationManager,另外我还找到了官方关于这块的代码提交记录:[Always allow toasts from foreground apps](https://cs.android.com/android/_/android/platform/frameworks/base/+/58b2453ed69197d765c7254241d9966ee49a3efb),大家可以感兴趣可以看看,还有一个问题,如果你想在 Android 10 及之后的版本仍然能在后台显示 Toast,请保证应用的通知栏权限或者悬浮窗权限处于开启的状态,如果你一定要求在后台状态下要 100% 能显示 Toast,请保证应用有悬浮窗权限,因为在某些厂商的手机上,就算有通知栏权限也是无法在后台显示 Toast,例如我用 HarmonyOS 2.0 测试就不行,所以具体要看产品怎么斟酌。

1.三方框架

* 权限框架:https://github.com/getActivity/XXPermissions* 网络框架:https://github.com/getActivity/EasyHttp* 标题栏框架:https://github.com/getActivity/TitleBar* 悬浮窗框架:https://github.com/getActivity/EasyWindow* ShapeView 框架:https://github.com/getActivity/ShapeView* ShapeDrawable 框架:https://github.com/getActivity/ShapeDrawable* 语种切换框架:[MultiLanguages](https://github.com/getActivity/MultiLanguages)* Gson 解析容错:[GsonFactory](https://github.com/getActivity/GsonFactory)* 日志查看框架:[Logcat](https://github.com/getActivity/Logcat)* 嵌套滚动布局框架:[NestedScrollLayout](https://github.com/getActivity/NestedScrollLayout) * Android 版本适配:[AndroidVersionAdapter](https://github.com/getActivity/AndroidVersionAdapter) * Android 代码规范:[AndroidCodeStandard](https://github.com/getActivity/AndroidCodeStandard)* Android 资源大汇总:[AndroidIndex](https://github.com/getActivity/AndroidIndex)* Android 开源排行榜:[AndroidGithubBoss](https://github.com/getActivity/AndroidGithubBoss)* Studio 精品插件:[StudioPlugins](https://github.com/getActivity/StudioPlugins) * 表情包大集合:[EmojiPackage](https://github.com/getActivity/EmojiPackage)* AI 资源大汇总:[AiIndex](https://github.com/getActivity/AiIndex)* 省市区 Json 数据:[ProvinceJson](https://github.com/getActivity/ProvinceJson)* Markdown 语法文档:[MarkdownDoc](https://github.com/getActivity/MarkdownDoc)

总结

提示:这里对文章进行总结:

例如:以上就是今天要讲的内容,本文仅仅简单介绍了Android自定义Toast的使用,提供了大量能使我们快速便捷地处理的函数和方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/495055.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用TC命令模拟弱网丢包

在网络测试和优化过程中,模拟弱网环境(如高延迟、丢包、抖动等)是非常重要的一环。tc(Traffic Control)是 Linux 内核中的一个强大工具,它可以用于流量整形、流量控制、队列管理等。通过 tc,我们…

概率论 期末 笔记

第一章 随机事件及其概率 利用“四大公式”求事件概率 全概率公式与贝叶斯公式 伯努利概型求概率 习题 推导 一维随机变量及其分布 离散型随机变量(R.V)求分布律 利用常见离散型分布求概率 连续型R.V相关计算 利用常见连续型分布的计算 均匀分布 正态…

【文档搜索引擎】搜索模块的完整实现

调用索引模块,来完成搜索的核心过程 主要步骤 简化版本的逻辑: 分词:针对用户输入的查询词进行分词(用户输入的查询词,可能不是一个词,而是一句话)触发:拿着每个分词结果&#xf…

如何在centos系统上挂载U盘

在CentOS上挂载NTFS格式的U盘,需要执行一系列步骤,包括识别U盘设备、安装必要的软件、创建挂载点,并最终挂载U盘。以下是在CentOS上挂载NTFS格式U盘的详细步骤: 一、准备工作 确认CentOS版本: 确保你的CentOS系统已经安装并正常运行。不同版本的CentOS在命令和工具方面可能…

pytest自动化测试数据驱动yaml/excel/csv/json

数据驱动 数据的改变从而驱动自动化测试用例的执行,最终引起测试结果的改变。简单说就是参数化的应用。 测试驱动在自动化测试中的应用场景: 测试步骤的数据驱动;测试数据的数据驱动;配置的数据驱动; 1、pytest结合数据…

ECharts散点图-气泡图,附视频讲解与代码下载

引言: ECharts散点图是一种常见的数据可视化图表类型,它通过在二维坐标系或其它坐标系中绘制散乱的点来展示数据之间的关系。本文将详细介绍如何使用ECharts库实现一个散点图,包括图表效果预览、视频讲解及代码下载,让你轻松掌握…

高强度螺栓等级划分

高强度螺栓的等级划分主要依据其性能等级,常见的等级有8.8级和10.9级。这些等级标号由两部分数字组成,分别表示螺栓材料的公称抗拉强度值和屈强比值。 8.8级高强度螺栓:表示螺栓杆的抗拉强度不小于800MPa,屈强比(屈服强…

WEB UI 创建视图

1 视图名称 (点第1创建视图) 2 模型节点 可以空 3 上下文节点 4 新增节点下的属性 ,参考结构(先建好的结构) 5 选择视图类型:(表单, 列表) 表单 :单条数据 列表 :多条数据(表格…

linux-19 根文件系统(一)

之前提到过,linux的目录是一个倒置的树,它通过层次性的方式来组织,管理整个系统的文件,而这本身实际上是通过文件系统。文件系统,大家记得文件系统是内核的主要功能之一, 它的主要目的就是实现本机上的某一…

四种电子杂志制作软件

​大家好,今天给大家种草四种超级实用的电子杂志制作软件。无论你是专业出版人士,还是业余爱好者,这四款软件都能帮助你轻松制作出精美的电子杂志。让我们一起来看看吧! 1.FLBOOK FLBOOK是一款在线仿真翻页制作H5电子画册&#x…

webserver log日志系统的实现

参考博客:https://blog.csdn.net/weixin_51322383/article/details/130474753 https://zhuanlan.zhihu.com/p/721880618 阻塞队列blockqueue 1、阻塞队列的设计流程是什么样的 它的底层是用deque进行管理的 阻塞队列主要是围绕着生产者消费者模式进行多线程的同步和…

kkfileview代理配置,Vue对接kkfileview实现图片word、excel、pdf预览

kkfileview部署 官网:https://kkfileview.keking.cn/zh-cn/docs/production.html 这个是官网部署网址,这里推荐大家使用docker镜像部署,因为我是直接找运维部署的,所以这里我就不多说明了,主要说下nginx代理配置&am…

《Vue3实战教程》5:响应式基础

如果您有疑问,请观看视频教程《Vue3实战教程》 响应式基础​ API 参考 本页和后面很多页面中都分别包含了选项式 API 和组合式 API 的示例代码。现在你选择的是 组合式 API。你可以使用左侧侧边栏顶部的“API 风格偏好”开关在 API 风格之间切换。 声明响应式状态…

EasyExcel停更,FastExcel接力

11月6日消息,阿里巴巴旗下的Java Excel工具库EasyExcel近日宣布,将停止更新,未来将逐步进入维护模式,将继续修复Bug,但不再主动新增功能。 EasyExcel以其快速、简洁和解决大文件内存溢出的能力而著称,官方…

深入解读数据资产化实践指南(2024年)

本指南主要介绍了数据资产化的概念、目标和意义,以及实施数据资产化的过程。指南详细阐述了数据资产化的内涵,包括数据资产的定义、数据资产化的目标与意义,并介绍了数据资产化的过程包括业务数据化、数据资源化、数据产品化和数据资本化。 …

广州大学计算机组成原理课程设计

一.课设性质,目的,任务 《计算机组成与系统结构课程设计》是计算机学院各专业集中实践性环节之一,是学习完《计算机组成与系统结构》课程后进行的一次全面的综合练习。其目的是综合运用所学计算机原理知识,设计并实现一台模型计算…

MimicBrush:智能图像编辑新宠,能否革新你的创意设计?

一、介绍 MimicBrush 是一款由阿里巴巴和香港大学联合研发的图像编辑工具,它通过模仿参考图像,对目标图像选定区域进行自动局部编辑。以下是关于 MimicBrush 的详细介绍: 1.技术特点 智能匹配 :利用尖端 AI 技术,Mi…

QT用Enigmavb 打包成单独exe

QT用这个工具打包成单个exe,然后再用winrar打包成zip可以发给别人 在之前需要用QT的release打包 之前的文章QTrelease打包【非单个exe】 Enigmavb 打包流程: 安装过程: next-》i accept -》选择安装位置 -》next -》Create a desktop ic…

f(f(x))=x^2 -11x+36, 求f(6)的值,

偶然看到的一个题目,一时兴起,做了一下。题目如下 简单粗暴的思路是待定系数法,盲猜f(x)是个2次函数,令f(x)ax^2bxc ,带入原式,发现矛盾(计算略)就想放弃了。 忽然看到如果带入6 的话&#xf…

华为浏览器(HuaweiBrowser),简约高效上网更轻松

华为浏览器是一款由华为公司自主研发的网页浏览工具,凭借其独特的设计理念和优质的用户体验,正在吸引越来越多的用户关注。这款基于Chromium技术打造的浏览器不仅继承了Chrome的高性能特质,更融入了华为自身的创新元素,为用户打造…