android Window悬浮窗添加 删除 修改

WindowManager windowManager;
    TextView textView;
    WindowManager.LayoutParams params;

    private void addWindow() {
        params = new WindowManager.LayoutParams(
                WindowManager.LayoutParams.TYPE_TOAST);
        // 类型是TYPE_TOAST,像一个普通的Android Toast一样。这样就不需要申请悬浮窗权限了。
        windowManager = (WindowManager) getApplication().getSystemService(
                getApplication().WINDOW_SERVICE);

        textView = new TextView(this);
        textView.setGravity(Gravity.CENTER);
        textView.setBackgroundColor(Color.BLACK);
        textView.setText(" @ csdn");
        textView.setTextSize(10);
        textView.setTextColor(Color.RED);

        // 初始化后不首先获得窗口焦点。不妨碍设备上其他部件的点击、触摸事件。
        params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;

        // 1.FLAG_NOT_FOCUSABLE:
        // 表示Window不需要获得焦点,也不需要接受接受各种输入时间,此标记会同时启用FLAG_NOT_TOUCH_MODAL,最终事件会直接传递给下层具有焦点的Window。
        // 2.FLAG_NOT_TOUCH_MODAL:
        // 在这个模式下,系统会将当前window区域之外单击事件传递给底层的Window,当前Window区域以内的2单击事件则自己处理。这个标记十分重要,一般说都会开启这个标记。
        // 3.FLAG_SHOW_WHEN_LOCKED
        // 开启这个模式可以让Window显示在锁屏的界面。

        params.width = WindowManager.LayoutParams.MATCH_PARENT;
        params.height = 300;
        params.gravity = Gravity.TOP;

        textView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(getApplication(), "不需要权限的悬浮窗实现",
                        Toast.LENGTH_LONG).show();
            }
        });

        windowManager.addView(textView, params);
    }

    private void deleteWindow() {
        if (windowManager != null && textView != null) {
            windowManager.removeView(textView);
        }
    }

    private void updateWindow() {
        if (windowManager != null && textView != null && params != null) {
            textView.setText("updateWindow");
            windowManager.updateViewLayout(textView, params);
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值