有时候需求很简单,就是改改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或者系统版本不会生效。
本站广告由 Google AdSense 提供
mrFan
toast.getWindowParams();你这个方法自己造出来的?
Mosaic-C
你的回复让我想起了一段有趣的回忆
参考:https://www.jianshu.com/p/b1f9d0891359
我那时候是做系统开发,可以直接访问hide方法~