自定义不依赖于Activity的Toast

应用场景:
1.常规应用
2.App处于后台时,需要Toast就可以在Service里使用下面的方法,这个Toast依赖的是窗体而不是Activity

权限:

<!--在窗体上挂载View-->
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
/**
 * 自定义Toast类
 * Created by Administrator on 16-11-28.
 */
public class Toast {
    //挂载的View
    private static View view=null;
    //窗体管理对象
    private static WindowManager mWM=null;

    /**
     * 显示自定义的Toast
     * @param context 上下文
     * @param layout  自定义的布局
     */
    public static void showCustomToast(Context context,int layout){
        //1.如果已经显示,就不显示了
        if(mWM!=null&&view!=null){
            return;
        }
        //2.获得窗体管理对象
        mWM=(WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
        //3.布局加载为View
        view = LayoutInflater.from(context).inflate(layout, null);
        //4.定义view的属性
        WindowManager.LayoutParams mParams = new WindowManager.LayoutParams();
        mParams.height = WindowManager.LayoutParams.WRAP_CONTENT;//高
        mParams.width = WindowManager.LayoutParams.WRAP_CONTENT;//宽
        mParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE//不能获取焦点
                |WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE//不能触摸(默认是可以触摸的)
                | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;//屏幕开启才能看到
        //格式
        mParams.format = PixelFormat.TRANSLUCENT;
        //显示级别:和Toast级别一致
        mParams.type = WindowManager.LayoutParams.TYPE_TOAST;
        //显示位置:右上角
        mParams.gravity = Gravity.RIGHT + Gravity.TOP;
        //5.挂载到窗体
        mWM.addView(view,mParams);
    }

    /**
     * 移除窗体上挂载的View
     */
    public static void removeCustomToast(){
        if(mWM!=null&&view!=null){
            mWM.removeView(view);
            //重置为null,防止两次取消报错
            mWM=null;
            view=null;
        }
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值