簡體   English   中英

如何使WindowManager按鈕可點擊?

[英]How to make WindowManager button clickable?

我使用 WindowManager 創建一個按鈕以顯示在來電屏幕中,我想讓這個按鈕可點擊以觸發一個意圖。 但是,我可以通過Button.OnTouchListener()讓它滑動到任何地方,但我不知道如何使它可點擊。 如何設置WindowManager的參數來制作呢?? 謝謝

 int LAYOUT_FLAG;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            LAYOUT_FLAG = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
        } else {
            LAYOUT_FLAG = WindowManager.LayoutParams.TYPE_PHONE;
        }
        wm = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE);
        params = new WindowManager.LayoutParams(
                WindowManager.LayoutParams.WRAP_CONTENT,
                WindowManager.LayoutParams.WRAP_CONTENT,
                LAYOUT_FLAG,
                0,
                PixelFormat.TRANSPARENT);
        params.flags =
                 WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED;
        params.gravity = Gravity.LEFT | Gravity.TOP;

        params.x = 500;
        params.y = 500;


        addBtn=new Button(ctx);
        addBtn.setText("button");
        wm.addView(addBtn, params);
        addBtn.setOnTouchListener(addBtnTouchListener);
        addBtn.setOnClickListener(addBtnClickListener);

在 addBtnTouchListener 中:

 private Button.OnTouchListener addBtnTouchListener = new Button.OnTouchListener() {
    int lastX, lastY;
    int paramX, paramY;

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                lastX = (int) event.getRawX();
                lastY = (int) event.getRawY();
                paramX = params.x;
                paramY = params.y;
                break;
            case MotionEvent.ACTION_MOVE:
                int dx = (int) event.getRawX() - lastX;
                int dy = (int) event.getRawY() - lastY;
                params.x = paramX + dx;
                params.y = paramY + dy;
                
                wm.updateViewLayout(addBtn, params);
                break;
        }

        return true;
    }
};

在此處輸入圖片說明

我發現我讓Button.OnTouchListener返回 false ,然后OnClickListener可以工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM