android 自定义Toast样式和显示方式
16lz
2021-01-26
问题:
- android 开发中如果不停的触发显示Toast,会造成Toast一个接一个的弹出,非常影响用户体验。
- 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"?>
更多相关文章
- Android(安卓)SDK工具(谷歌提供的16个工具)简介
- 分享Android(安卓)recovery updater-script进度条函数的使用经验
- Android(安卓)Studio显示行数
- (转)Android* 应用性能调试
- android双屏显示的一些修改与尝试
- Android获取并显示图片
- Android(安卓)Monkey工具
- Android中使用ps命令查看进程PID
- 如何恢复(初始化)android studio所有设置