抬头仰望星空,是否能发现自己的渺小。

伪斜杠青年

人们总是混淆了欲望和理想

自定义一个可点击的简单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();
    }
}

以上,希望对你有帮助。

测试在rom定制上可行,如果是三方应用不建议这样做,因为某些rom或者系统版本不会生效。


2条评论

  • 头像

    mrFan

    toast.getWindowParams();你这个方法自己造出来的?

    • Mosaic-C

      Mosaic-C

      你的回复让我想起了一段有趣的回忆

      参考:https://www.jianshu.com/p/b1f9d0891359

      我那时候是做系统开发,可以直接访问hide方法~

发表评论