getActivity / Toaster

Android 吐司框架,专治 Toast 各种疑难杂症
Apache License 2.0
3.25k stars 406 forks source link

[Bug]:Toast 无法跨页面显示 #124

Closed yangkai69 closed 1 year ago

yangkai69 commented 1 year ago

框架版本【必填】

12.5

问题描述【必填】

我使用了文档上的方法(见最后)跨页面显示,但是在原生android 13/14的系统里显示的不正确(国内安卓13系统,显示正确)。 我需要将toast显示在页面中间,但是在android 13/14系统(android studio自带模拟器)里,他显示在了底部。跟其他系统显示效果不一致。

文档方法: ToastParams params = new ToastParams(); params.text = "我是一个能跨页面展示的 Toast"; // 表示这个 Toast 需要跨页面展示 params.crossPageShow = true; Toaster.show(params);

复现步骤【必填】

1、使用android studio创建一个Deviece,API 33 / 34; 2、使用跨页面的Toast,如: ToastParams params = new ToastParams(); params.text = "我是一个能跨页面展示的 Toast"; // 表示这个 Toast 需要跨页面展示 params.crossPageShow = true; Toaster.show(params); 3、显示不正确(没有显示在中间)。

是否必现【必填】

项目 targetSdkVersion【必填】

33

出现问题的手机信息【必填】

android studio模拟器/海外版本iqoo手机

出现问题的安卓版本【必填】

andorid 13/14

问题信息的来源渠道【必填】

自己遇到的

是部分机型还是所有机型都会出现【必答】

部分机型

框架最新的版本是否存在这个问题【必答】

框架文档是否提及了该问题【必答】

是否已经查阅框架文档但还未能解决的【必答】

issue 列表中是否有人曾提过类似的问题【必答】

是否已经搜索过了 issue 列表但还未能解决的【必答】

是否可以通过 Demo 来复现该问题【必答】

提供报错堆栈

No response

提供截图或视频

No response

提供解决方案

No response

getActivity commented 1 year ago

小伙子,根据你提供的复现步骤,我无法复现你说的这个问题

Pixel 2 Android 13

vivo iQOO 9 Pro Android 13

yangkai69 commented 1 year ago

你能用android studio的模拟器试一下吗? 因为我这里有用户反映没有弹出toast,我也不知道他是什么手机,但是我在模拟器里使用Toaster是无法弹出在中间的

getActivity commented 1 year ago

@yangkai69 Pixel 2 Android 13 就是 Android 模拟器

yangkai69 commented 1 year ago

我下载的demo,没有跨页面的按钮,能把你现在使用的demo上传一下,然后我放到模拟器里,录制一个视频或者图片吗

getActivity commented 1 year ago

@yangkai69 小伙子,你重新拉一下代码,现在最新的 Demo 代码是有这个按钮的

yangkai69 commented 1 year ago

@yangkai69 小伙子,你重新拉一下代码,现在最新的 Demo 代码是有这个按钮的

image

你看,我使用这样的代码,是无法将toast展示在中间的。

yangkai69 commented 1 year ago

https://github.com/getActivity/Toaster/assets/16103086/5d96fd88-8eed-4b24-bbf4-e3eae1de74ae

这是用红米k20,可以显示在中间

yangkai69 commented 1 year ago

https://github.com/getActivity/Toaster/assets/16103086/41629f8a-97cc-4892-9a00-f0fee28046d6

这是用android 13模拟器,不能展示在中间

yangkai69 commented 1 year ago

73_1697421119.mp4.zip

这是同一个代码,分别执行在红米k20和模拟器上的对比视频, 由于视频比较大上传不了,我压缩了一下,你能看得到吗

getActivity commented 1 year ago
image
getActivity commented 1 year ago

小伙子,介于我无法复现该问题,所以需要你协助 debug 一下代码,请你 debug 一下 ToastStrategy.createToast 方法,并将两个机型运行后的差异之处告知一下我。

yangkai69 commented 1 year ago

小伙子,介于我无法复现该问题,所以需要你协助 debug 一下代码,请你 debug 一下 ToastStrategy.createToast 方法,并将两个机型运行后的差异之处告知一下我。

image

我使用红米k20(android 10),走了 toast = new SystemToast(mApplication) diyToastStyle(toast, params.style); 但是使用模拟器,走了toast = new SystemToast(mApplication) 没有走 diyToastStyle(toast, params.style);

getActivity commented 1 year ago

为什么没有走 diyToastStyle 方法?具体是哪个代码判断导致它不走?

yangkai69 commented 1 year ago
image

这个方法,全都是false,toast是SystemToast,版本全是33

image

这个方法走到这里,返回true 这样导致最后不走diyToastStyle

getActivity commented 1 year ago

小伙子,你说的这种情况应该是 Android 模拟器的情况吧?那红米 K20 Pro 这块的代码逻辑是怎么执行的呢?

yangkai69 commented 1 year ago
image

我的红米k20,系统29,Build.VERSION_CODES.R是30,所有截图里的这个方法返回true,能走进diyToastStyle

getActivity commented 1 year ago
image

小伙子,你照着图片将这两句代码注释掉,然后在红米和模拟器上面再跑一下,你就知道为什么框架要这么写了。

yangkai69 commented 1 year ago

嗯,报错了,那现在是否有解决方案,来使得我这种情况,还是能展示在中间。

getActivity commented 1 year ago

@yangkai69 小伙子,你如果想要 Toast 能够跨页面显示,那么只能用系统 Toast,但是系统 Toast 在 Android 11 上面禁止了自定义样式,你如果一定要达到既能跨页面显示,又要样式能够自定义,那么只能申请悬浮窗权限了,在拥有悬浮窗权限的情况下,框架会自动切换到一个支持全局显示的 WindowManager 来代替 Toast 显示。

yangkai69 commented 1 year ago

好的,谢谢。

klxiaoniu commented 1 year ago

https://github.com/GrenderG/Toasty

这个框架可以跨界面显示,用的是 toast 的 setView,targetAPI30+ 后台情况可能无法弹出,但是这个好久没更新了

getActivity commented 1 year ago

https://github.com/GrenderG/Toasty

这个框架可以跨界面显示,用的是 toast 的 setView,targetAPI30+ 后台情况可能无法弹出,但是这个好久没更新了

小伙子,其他框架能做到的,Toaster 也可以做到,Toaster 做不到的,目前就我对其他同类框架的了解,暂时还没有发现框架能做到的。