Я использую приведенный ниже код для управления представлением оконного менеджера для версии M и ниже. Над версией M все работает нормально, но по M клики на представлении оконного менеджера не работают, пожалуйста, проверьте, что я сделал не так?
if (Build.VERSION.SDK_INT > 25) {
params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM,
PixelFormat.TRANSLUCENT);
}else {
params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
PixelFormat.TRANSLUCENT);
}
это корневое представление, которое я добавляю в диспетчере окон
LayoutInflater layoutInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = layoutInflater.inflate(R.layout.floating_youtube, null);
linearFloatingControls = view.findViewById(R.id.linearFloatingControls);
Добавление вида
//Add the view to the window
mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
mWindowManager.addView(view, params);
это моя кнопка в поле зрения и прослушиватель щелчков
ImageView imgOpen = view.findViewById(R.id.imgOpen);
imgOpen.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
openApp();
Log.e("click","imgOpen");
}
});
Теперь я хочу переместить оконный менеджер, коснувшись панели управления с опцией кнопки «Открыть», поэтому для этого используем сенсорный слушатель
/**
* Touch listener for attached view of window manager
*/
private final View.OnTouchListener moveListener = new View.OnTouchListener() {
private int initialX;
private int initialY;
private float initialTouchX;
private float initialTouchY;
@Override
public boolean onTouch(View v, MotionEvent event) {
Log.e("ontouch","yes");
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
Log.e("ontouch","ACTION_DOWN");
isMove = false;
//remember the initial position.
initialX = params.x;
initialY = params.y;
//get the touch location
initialTouchX = event.getRawX();
initialTouchY = event.getRawY();
return true;
case MotionEvent.ACTION_UP:
Log.e("ontouch","ACTION_UP");
if (!isMove){
openApp();
}
return true;
case MotionEvent.ACTION_MOVE:
//Calculate the X and Y coordinates of the view.
isMove = true;
params.x = initialX + (int) (event.getRawX() - initialTouchX);
params.y = initialY + (int) (event.getRawY() - initialTouchY);
mXGlobal = params.x;
mYGlobal = params.y;
//Update the layout with new X & Y coordinate
mWindowManager.updateViewLayout(view, params);
return true;
}
return false;
}
};
Событие щелчка не работает - всегда регистрируйте удаление и отмену события из-за отсутствия фокуса окна.