[Blankj/AndroidUtilCode]ToastUtils 无法正常弹出

2024-07-15 662 views
5
ToastUtils 无法正常弹出

在应用内某处调用ToastUtils.showShort(final CharSequence text),结果实际调用的是ToastUtils.showShort(final String format, final Object... args),导致toast无法正常弹出

  • AndroidUtilCode 的版本:1.29.0 androidx
  • 出现 Bug 的设备型号:任意机型
  • 设备的 Android 版本:30
截图

微信图片_20201214104929

回答

8

升到最新版本试试呀,不要急着提 issue 哈,走这个函数没啥问题的。

6
private static IToast newToast(ToastUtils toastUtils) {
    if (!toastUtils.isNotUseSystemToast) {
        if (NotificationManagerCompat.from(Utils.getApp()).areNotificationsEnabled()) {
            if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
                return new SystemToast(toastUtils);
            }
            if (!UtilsBridge.isGrantedDrawOverlays()) {
                return new SystemToast(toastUtils);
            }
        }
    }

    // not use system or notification disable
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N_MR1) {
        return new WindowManagerToast(toastUtils, WindowManager.LayoutParams.TYPE_TOAST);
    } else if (UtilsBridge.isGrantedDrawOverlays()) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            new WindowManagerToast(toastUtils, WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY);
        } else {
            new WindowManagerToast(toastUtils, WindowManager.LayoutParams.TYPE_PHONE);
        }
    }
    return new ActivityToast(toastUtils);
}

@Blankj Blankj大神,android 9机器上我遇到悬浮窗遮挡toast的情况, A悬浮窗设置的type=TYPE_APPLICATION_OVERLAY。按我对书本层级这段理解,只有欲显示的B窗口type >= TYPE_APPLICATION_OVERLAY时,才有可能显示在A窗口上面。

所以使用ActivityToast怎么做都只能显示在A悬浮窗下面, 不知理解这否正确?

那边你的代码 else if (UtilsBridge.isGrantedDrawOverlays()) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { new WindowManagerToast(toastUtils, WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY); } else { new WindowManagerToast(toastUtils, WindowManager.LayoutParams.TYPE_PHONE); } } return new ActivityToast(toastUtils);

是不是写错了,应该改成: else if (UtilsBridge.isGrantedDrawOverlays()) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { return new WindowManagerToast(toastUtils, WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY); } else { return new WindowManagerToast(toastUtils, WindowManager.LayoutParams.TYPE_PHONE); } } return new ActivityToast(toastUtils);

9

在realme RMX1971,android10,弹出dialogfragment情况下,无法弹出Toast

8

同样遇到toast在一加手机上不弹出的问题,跟楼上的一致。确认弹出dialogfragment情况下,无法弹出Toast。

2

1.30.6 版本已修复