自定义一个可点击的简单Toast


有时候需求很简单,就是改改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();
}

}

以上,希望对你有帮助。

声明:TIL|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA[ZH]协议进行授权

转载:转载请注明原文链接 - 自定义一个可点击的简单Toast


Life is very interesting. In the end, some of your greatest pains become your greatest strengths.