[英]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.