为什么Toast吐司不显示?

因为你拒绝了App通知栏的相关权限

我们看下Toast源码

  public void show() {
        if (mNextView == null) {
            throw new RuntimeException("setView must have been called");
        }

        INotificationManager service = getService();
        String pkg = mContext.getOpPackageName();
        TN tn = mTN;
        tn.mNextView = mNextView;

        try {
            service.enqueueToast(pkg, tn, mDuration);
        } catch (RemoteException e) {
            // Empty
        }
    }

如果你关闭了通知栏权限这个INotificationManager 就报异常造成无法显示吐司

解决办法如下:

工程目录下 build.gradle

allprojects {
		repositories {
			...
			maven { url 'https://www.jitpack.io' }
		}
	}

项目目录下build.gradle

dependencies {
	        implementation 'com.github.liangchaojie:ToastUtil:v1.1'
	}

1 在你的Application初始化

public class APP extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        ToastUtil.init(this);
    }
}

2 直接调用

  ToastUtil.show(this,"hahah");

3 如果你想自定义吐司

 ToastUtil.show(this,"hahah", new IToast() {
            @Override
            public int gravity() {
                return 0;
            }

            @Override
            public int xOffest() {
                return 0;
            }

            @Override
            public int yOffest() {
                return 0;
            }

            @Override
            public int windowAnimations() {
                return 0;
            }

            @Override
            public int duration() {
                return 0;
            }

            @Override
            public View view(Context context) {
               // View view=LayoutInflater.from(context).inflate(R.layout.activity_main, null);
        TextView textView = new TextView(context);
        textView.setText("虽然没有权限但是我还是弹出了吐司虽然没有权限但是我还是弹出了吐司虽然没有权限但是我还是弹出了吐司!");
        return textView;
            }
        });

使用就到到这里,如果不满足于使用还想知道具体的代码逻辑请继续看

1 先判断是否具备通知栏权限?
2 有权限就直接使用系统默认的吐司
3 没有权限就获取当前的窗口管理器在当前管理器上手动添加一个view
4 使用Handler的作用是让吐司显示若干时间后再消失
5 WindowHelper的作用是将所有Activty注册进Application,这样的话Activity销毁的时候对应的窗口管理器也销毁了,这就避免了内存泄露

想看源码的话请点击我的github 一定可以弹出来的吐司

最后感谢这篇博客的给我的启发

Toast 不显示了?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值