有时候需求很简单,就是改改Toast的布局,位置,界面,再加个简单的点击事件,网上有挺多三方框架的,或者新推出的 Snackbar,但是啊,需求真的很简单,用不着动不动就拉一个三方库,写一堆反射,代码如下:
public class IconToast { /** * 展示toast==LENGTH_SHORT * * @param msg */ public void show(Context context, String msg, boolean isSuccess, View.OnClickListener onClickListener) { show(context, msg, Toast.LENGTH_SHORT, isSuccess, onClickListener); } /** * 展示toast==LENGTH_LONG * * @param msg */ public void showLong(Context context, String msg, boolean isSuccess, View.OnClickListener onClickListener) { show(context, msg, Toast.LENGTH_LONG, isSuccess, onClickListener); } private void show(Context context, String massage, int showLength, boolean isSuccess, View.OnClickListener onClickListener) { //使用布局加载器,将编写的toast_layout布局加载进来 View view = LayoutInflater.from(context).inflate(R.layout.icon_toast_layout, null); //获取ImageView ImageView image = (ImageView) view.findViewById(R.id.status_icon); //设置图片 if (isSuccess) { image.setImageResource(R.mipmap.cut_success); } else { image.setImageResource(R.mipmap.cut_failed); } //获取TextView TextView title = (TextView) view.findViewById(R.id.toast_msg); //设置显示的内容 title.setText(massage); TextView actionBtn = (TextView) view.findViewById(R.id.action_btn); actionBtn.setVisibility(isSuccess ? View.VISIBLE : View.GONE); if (isSuccess) { actionBtn.setClickable(true); actionBtn.setOnClickListener(onClickListener); } Toast toast = new Toast(context); //设置Toast要显示的位置,右下角,X轴偏移0个单位,Y轴偏移120个单位, toast.setGravity(Gravity.END | Gravity.BOTTOM, 0, 120); //设置显示时间 toast.setDuration(showLength); //填充布局 toast.setView(view); //更改弹窗类型 支持可点击 WindowManager.LayoutParams windowParams = toast.getWindowParams(); windowParams.flags = WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON; toast.show(); } }
以上,希望对你有帮助。
测试在rom定制上可行,如果是三方应用不建议这样做,因为某些rom或者系统版本不会生效。
本站由以下主机服务商提供服务支持:
mrFan
toast.getWindowParams();你这个方法自己造出来的?
Mosaic-C
你的回复让我想起了一段有趣的回忆
参考:https://www.jianshu.com/p/b1f9d0891359
我那时候是做系统开发,可以直接访问hide方法~