thinkphp3.2.3 d方法调用自定义模型_啥?Android 11 不能自定义 Toast 了?
前言
Android 11(R)是2020年的下一代 Android,Google 于上周发布了 Android 11: Developer Preview 3
在 Android 11 Toast 的行为发生了变更
- 禁止后台自定义 Toast
- text toast 不允许自定义
- setView() 被弃用
- 新增 Toast.Callback 回调
Android 11 API 变更
禁止后台自定义 Toast
自定义 Toast 「不能」 在 app 处于后台时显示,取而代之会显示 「"Background custom toast blocked for package [packageName] See g.co/dev/toast."」
的文本 toast
普通的 text toast 不受影响
text toast 不允许自定义
默认的 toast 是 text toast,如果想使用自定义的 toast ,需要调用 setView()
方法
在 targetSdkVersion
为 R 或更高时,调用 setGravity
和 setMargin
方法将不进行任何操作
官方文档中所述的 Android R 仅影响 「text toast」 ,而自定义的 toast 不受影响
如图,在 test toast 中调用 setGravity
和 setMargin
方法,但 toast 位置并未居中
setView() 被弃用
setView()
方法被标记弃用
「Deprecated」 表示该功能目前仍可以使用,但可能会在将来的 Android 版本中删除。建议开发人员避免长期使用此功能
可以看到,官方在一步步禁止自定义 Toast
目前是 targetSdkVersion
为 R 或更高的 app 禁止后台弹出自定义 Toast
同时将 setView() 方法标记弃用,当该方法从源码中移除后,自定 Toast 的方式将被彻底消灭
当然,官方提供了相应的替代品,使用 Snackbar
新增 Toast.Callback 回调
添加了新的回调(Toast.Callback),以通知 Toast 显示和隐藏。可以通过以下方法轻松将其添加到 Toast 中:
val toast = Toast.makeText(this, R.string.simple2_toast, Toast.LENGTH_SHORT)toast.addCallback(object : Toast.Callback() {
override fun onToastShown() { super.onToastShown() Log.d(TAG, "onToastShown") }
override fun onToastHidden() { super.onToastHidden() Log.d(TAG, "onToastHidden") }
})toast.show()
一些小 tips 及 demo
demo 在这 ,切换 Flavor 即可指定不同的 targetSdkVersion
在写 demo 时遇到一些小问题
tip1
Handler() 无参构造方法和 Handler(Handler.Callback)
构造方法 被弃用了
简单来讲就是在初始化 Handler 时要显示的配置 Looper
Handler 使用不当会有这样一种 bug,例如在子线程通过无参构造函数创建 Handler,您可能会看到这样的异常
详细内容这里就不讲了,这是 Android 开发者的必备知识 官方通过强制使用传入 Looper 的 Handler 构造器来避免使用中的问题
tip2
过去使用 Toast 构造器创建 Toast 对象 并调用 setText 方法会崩溃,targetSdkVersion
为 R 时不会崩溃。
相同的代码 targetSdkVersion
低版本会崩溃:
崩溃,但设置位置生效:
异常log:
API 29 源码:
API 29 中调用 setText() 方法时要保证 mNextView 不为空,而 mNextView 是调用 setView 赋值的
因此过去使用 Toast 构造器创建 toast 对象无法创建普通的 text toast,必须调用 setView 方法
至于 API 30 肯定在这里做了修改,由于现在看不到源码,我也猜测不出官方的用意
如果各位小伙伴有什么想法欢迎评论区留言
---END---
thinkphp3.2.3 d方法调用自定义模型_啥?Android 11 不能自定义 Toast 了?相关推荐
- android自定义通知栏图标大小,Android不使用自定义布局情况下实现自定义通知栏图标的方法...
本文实例讲述了Android不使用自定义布局情况下实现自定义通知栏图标的方法.分享给大家供大家参考,具体如下: 自定义通知栏图标?不是很简单么.自定义布局都不在话下! 是的,有xml布局文件当然一切都 ...
- arthas 查看哪个方法调用最耗时_火眼金睛,Java诊断利器Arthas
1 简介 Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱 当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决: 这个类从哪个 jar 包加载的?为什么会报各种类相关的 ...
- android 自定义dialog 定时关闭,Android编程实现自定义Dialog的大小自动控制方法示例...
本文实例讲述了Android编程实现自定义Dialog的大小自动控制方法.分享给大家供大家参考,具体如下: Android应用开发中,无论是出于功能还是增加用户体验,弹出对话框(Dialog)进行一些 ...
- Android实现自定义曲线截屏,Android实现价格走势自定义曲线图
本文是引用开源图表库框架 MPAndroidChart的LineChart 1.需求: (1)动态添加RadioButton,点击改变下面的LineChart数据 (2)LineChart绘制价格走势 ...
- android自定义横竖双向滚动,Android开发实现自定义水平滚动的容器示例
Android开发实现自定义水平滚动的容器示例 发布时间:2020-09-12 01:25:56 来源:脚本之家 阅读:71 作者:CharlinGod 本文实例讲述了Android开发实现自定义水平 ...
- 自定义搜索引擎_如何创建自己的自定义Google搜索引擎
自定义搜索引擎 Have you ever wanted to create a custom Google search engine that searches only specific web ...
- python如何导入自定义模块_【python】导入自定义模块
一.直接import 1.当执行文件与要导入的py文件在同一目录下时 假设要在wangyi.py中导入weibo.py文件 import weibo 2.当执行文件与要导入的py文件所在文件夹在同一目 ...
- computed set 自定义参数_深入理解vmodel之自定义组件用法
根据上一篇<深入理解 v-model 之表单用法>基本对 v-model 有了比较深的理解,接下来我们看看它如何在自定义组件中使用. 首先,我们知道下面两个用法等价的: <input ...
- python前端调用后端模型_【Python】【Flask】前端调用后端方法
后端代码: @app.route("/test",methods=['POST','GET']) def test(): return "我是测试的" 前端代码 ...
- python前端调用后端模型_前端调用后端的方法(基于restful接口的mvc架构)
1.前端调用后台: 建议用你熟悉的一门服务端程序,例如ASP,PHP,JSP,C#这些都可以,然后把需要的数据从数据库中获得,回传给客户端浏览器(其实一般就是写到HTML中,或者生成XML文件)然后在 ...
最新文章
- WEBSHELL恶意代码批量提取清除工具
- 1008 N的阶乘 mod P ——51Nod(同余定理)
- 关于Apache mod_rewrite的中文配置、使用和语法介绍(实现URL重写和防盗链功能)
- 对四方继保实施嵌入式Linux开发培训
- 前端学习(3199):jsx小练习
- VS2015配置环境支持opencv3库(网络方法总结)
- Spring Boot Logback 配置详解
- 换脸软件ZAO被“锤”!微信:我的封杀可能会迟到,但不会缺席
- java volatile 基本类型_Java中Volatile关键字详解(转)
- EMNLP2021 论文预讲会,邀你一起共赏自然语言处理学术盛宴(日程全公开)
- Android中缓存记忆
- 帝豪gs车机系统wince_酷车:10万左右买辆“网红车”,名爵ZS和帝豪GS怎么选?...
- linux基础命令入门到精通
- 《编码:隐匿在计算机软硬件背后的语言》读书笔记
- ImageJ 用户手册——第四部分(ImageJ用户界面)
- Flutter版讯飞语音识别demo
- 从虎胆龙威4(live free or die hard)说黑客攻击
- 虚拟机装系统后无法打开系统解决方案
- Sqlserver官网下载时各版本含义
- 从爬取豆瓣影评到基于朴素贝叶斯的电影评论情感分析(上)
热门文章
- 一夜上手uni-app
- npm下载地址的查询与切换
- vue学习笔记-16-vue的数组方法
- win10 C语言qt调试,如何在Windows中调试Qt(MSVC)应用程序
- 蕊动矿机linux cpu超频,蚂蚁l3矿机超频方法!最佳超频参数! | 呆毛网
- python优秀源码2019_SUCTF2019,python源码分析,漏洞原理
- 白话/图示 sleep_on/wake_up的执行流程
- STM32F103ZET6 PWM输出
- Python用可变参数找出最大值和最小值
- UWP 手绘视频创作工具技术分享系列