ventana flotante que pueden arrastrarse en la aplicación para Android: No se centra en elementos de diseño

Ankesh Kumar Jaisansaria:

En mi solicitud estoy haciendo un tipo de ventana flotante que aparece en la parte superior de cualquier aplicación o pantalla de inicio. Como una burbuja de chat de facebook. He hecho el frontón ventana de arrastre flotante con algunos botones para diferentes acciones. Tengo un diseño EditarTexto en la ventana. Me estoy haciendo algún problema en centrarse en la ventana flotante. cada diseño es unfocus y editar texto también no está funcionando.

He adjuntado un video screenshoot de la misma.

Mi código es: -

En el servicio alcrear () {}

    mFloatingWidget = LayoutInflater.from(this).inflate(R.layout.layout_floating_widget, null);
    int layoutType;
    if(Build.VERSION.SDK_INT < 26) {
        layoutType = WindowManager.LayoutParams.TYPE_PHONE;
    } else {
        layoutType = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
    }


    final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.WRAP_CONTENT,
            layoutType,
            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
            PixelFormat.TRANSLUCENT);

    params.gravity = Gravity.TOP | Gravity.START;
    params.x = 0;   // Initial Position of window
    params.y = 100; // Initial Position of window
    mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
    mWindowManager.addView(mFloatingWidget, params);


    mFloatingWidget.findViewById(R.id.root_container).setOnTouchListener(new View.OnTouchListener() {
        private int initialX;
        private int initialY;
        private float initialTouchX;
        private float initialTouchY;
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            Log.d("AD","Action E" + event);
            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    Log.d("AD","Action Down");
                    initialX = params.x;
                    initialY = params.y;
                    initialTouchX = event.getRawX();
                    initialTouchY = event.getRawY();
                    return true;
                case MotionEvent.ACTION_UP:
                    Log.d("AD","Action Up");
                    int Xdiff = (int) (event.getRawX() - initialTouchX);
                    int Ydiff = (int) (event.getRawY() - initialTouchY);
                    if (Xdiff < 10 && Ydiff < 10) {
                        if (isViewCollapsed()) {
                            collapsedView.setVisibility(View.GONE);
                            expandedView.setVisibility(View.VISIBLE);
                        }
                    }
                    return true;
                case MotionEvent.ACTION_MOVE:
                    Log.d("AD","Action Move");
                    params.x = initialX + (int) (event.getRawX() - initialTouchX);
                    params.y = initialY + (int) (event.getRawY() - initialTouchY);
                    mWindowManager.updateViewLayout(mFloatingWidget, params);
                    return true;
            }
            return false;
        }
    });


}

MUESTRA

Por favor, hágamelo saber lo que está mal con el código.

Gracias

Como mi Agarwal:

Esto esta sucediendo porque el foco no se establece en el gestor de ventanas, en lugar de su ventana en la pantalla principal. Para evitar este conjunto el FLAG_NOT_FOCUS a 0 en params.

Actualizado Código: -

final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.WRAP_CONTENT,
            layoutType,
            0,   // I HAVE CHANGED THIS FROM NOT FOCUS TO ZERO
            PixelFormat.TRANSLUCENT);

params.gravity = Gravity.TOP | Gravity.START;
params.x = 0;   // Initial Position of window
params.y = 100; // Initial Position of window
mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
mWindowManager.addView(mFloatingWidget, params);

Espero que esto responda a su consulta.

Gracias

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=330419&siteId=1
Recomendado
Clasificación