问题:

  1. android 开发中如果不停的触发显示Toast,会造成Toast一个接一个的弹出,非常影响用户体验。
  2. android设备有千万个,每个设备的Toast的背景有可能不一样,造成在应用内显示时造成显示不够清晰

在这里我封装了一个Toast工具类可以实现弹出下一个Toast时检查当前是否有显示Toast,有的话重用当前Toast,避免重复弹出。
可以自定义Toast显示的view,实现你想要的样式,实现领导的梦想!!!

 

Toast工具类

 

/** * Created by Aaron on 2019/07/18. * * 弹出toast提示工具类 */object ToastUtils {    private var mToast: Toast? = null  //toast样式    private val mMsg: String? = null  //上一次弹出的内容    private var mToastView: ToastView? = null  //自定义view    private var mToastGravity:Int = -1  //位置    /**     * 弹出提示     * @param msg  提示信息     * @param time  显示时间     */    fun showToast(msg: String?, time: Int, context: Context?) {        if (mToast == null || mMsg != null && msg != mMsg) {            mToast = Toast.makeText(context, msg, time)            if (mToastView != null) {                mToast!!.view = mToastView                mToastView!!.setText(msg!!)            } else {                mToast!!.setText(msg)            }        } else {            if (mToastView != null && mToast!!.view != mToastView) {                mToast!!.view = mToastView            }            if (mToastView != null) {                mToastView!!.setText(msg!!)            } else {                mToast!!.setText(msg)            }            mToast!!.duration = time        }        if (mToastGravity != -1) {            mToast!!.setGravity(mToastGravity, 0, 0)        }        //不设置的话,最高显示到状态栏下面        mToast!!.view.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN        mToast!!.show()    }    /**     * 弹出提示信息     * @param msgId  提示信息id     * @param time  显示时间     */    fun showToast(msgId: Int, time: Int, context: Context?) {        showToast(context?.getString(msgId), time, context)    }    /**     * 弹出短时间提示     * @param msg  提示信息     */    fun showShortToast(msg: String, context: Context?) {        showToast(msg, Toast.LENGTH_SHORT, context)    }    fun showShortToast(msgId:Int, context: Context?) {        showToast(msgId, Toast.LENGTH_SHORT, context)    }    /**     * 弹出长时间提示     * @param msg  提示信息     */    fun showLongToast(msg: String, context: Context?) {        showToast(msg, Toast.LENGTH_LONG, context)    }    /**     * 关闭当前Toast     */    fun cancelCurrentToast() {        if (mToast != null) {            mToast!!.cancel()        }    }    fun reToast(msg: String) {        Toast.makeText(JblBaseApplication.sInstance, msg, Toast.LENGTH_SHORT).show()    }    fun reToast(msgId: Int) {        Toast.makeText(JblBaseApplication.sInstance, msgId, Toast.LENGTH_SHORT).show()    }    fun setToastView(context: Context?) {        mToastView = ToastView(context!!)    }    fun setToastGravity(gravity: Int) {        mToastGravity = gravity    }    /**     * 重置toast 信息     */    fun resetToast() {        mToastView = null        mToastGravity = -1        mToast = null    }}

自定义view

/** * Created by Aaron on 2019-07-18. * * 自定义toast view */class ToastView : FrameLayout {    private var toastText: TextView? = null    constructor(context: Context) : super(context) {        init(context)    }    constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) {        init(context)    }    constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {        init(context)    }    constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int, defStyleRes: Int) : super(        context,        attrs,        defStyleAttr,        defStyleRes    ) {        init(context)    }    private fun init(context: Context) {        addView(View.inflate(context, R.layout.toast_view, null))        toastText = findViewById(R.id.toastText)    }    fun setText(text: String) {        toastText!!.text = text    }    fun setTextSize(size: Int) {        toastText!!.textSize = size.toFloat()    }    fun setTextColor(color: Int) {        toastText!!.setTextColor(color)    }}

自定义view layout

<?xml version="1.0" encoding="utf-8"?>    

 

更多相关文章

  1. Android(安卓)SDK工具(谷歌提供的16个工具)简介
  2. 分享Android(安卓)recovery updater-script进度条函数的使用经验
  3. Android(安卓)Studio显示行数
  4. (转)Android* 应用性能调试
  5. android双屏显示的一些修改与尝试
  6. Android获取并显示图片
  7. Android(安卓)Monkey工具
  8. Android中使用ps命令查看进程PID
  9. 如何恢复(初始化)android studio所有设置

随机推荐

  1. Android(安卓)事件拦截/分发机制 (图解+代
  2. Content Provider初谈和Android联系人信
  3. Android(安卓)分区挂载
  4. Android中Intent的使用示例
  5. 以Android(安卓)Library的方式使用 for
  6. Android的属性Property系统
  7. Android(安卓)7.0 虚拟按键(NavigationBar
  8. Android:Parcelable接口
  9. android手把手教你开发launcher(一)(Android
  10. 自定义android的tab样式