关于Toast 的使用问题

系统的Toast

Toast 是Android 系统的一个控件,我们这样就可以这样调用。
Toast.makeText(context, text, duration).show();

自定义Toas

但是真正的项目中,这样并不能满足需求,所以就需要我们来自定义Toast,系统的Toast 也暴露了setView() 的函数,我们可以自定义View,这样就可以达到自定义View 的效果。
下面是官方文档给出的一个Demo

添加点击事件

我们聊天页面收到新消息,点击进入聊天页面,这样的需求就需要给Toast 添加点击事件。
我们看源码可以知道,系统的Toast 是没有点击事件的,这就需要我们自定义一个Toast,我们只需要模仿系统的Toast 再建一个类似的Toast 即可。
我们通过创建一个View,将它添加到WindowManager。
并且给wm 设置LayoutParams 的各种属性,flag 属性可以设置是否可点击啊,我们设置为可点击,就可以重新创建一个属于自定义View 了。

看下面代码。

问题:
之前遇到一个问题,自定义的Toast,在红米Note 3 上有时不显示,网上也有人提供了方案,但是我想到了另一个方案,利用Dialog 替代自定义Toast,当show() 的时候,给一个延迟三秒之后,然后再dismiss,也能起到Toast 的效果。

参考

https://developer.android.com/guide/topics/ui/notifiers/toasts.html

用Fragment 替代Toast,它存在于Activity,并不属于Windows,按返回按钮就消失了,目前还没解决(捂脸,逃)。

如果你有其他的方法,欢迎一块讨论。
这篇简短的文章,没有多少技术含量,希望能给你一点思路。
我是Tikitoo,一个技术渣,在这里分享Android 开发相关的东西。

Tikitoo wechat
欢迎关注我的公众号:安卓同学(ID:AndroidMate)