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;
}
});
}
Por favor, hágamelo saber lo que está mal con el código.
Gracias
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