Событие клика не работает внутри оконного менеджера - PullRequest
0 голосов
/ 14 сентября 2018

Я использую приведенный ниже код для управления представлением оконного менеджера для версии 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;
    }
};

Событие щелчка не работает - всегда регистрируйте удаление и отмену события из-за отсутствия фокуса окна.

...