superposición superposicion samsung quita para pantalla desactivar cómo aplicacion android user-interface

superposicion - Cómo implementar una superposición emergente que se puede mostrar sobre cualquier otra aplicación en Android



superposición de pantalla samsung j7 (5)

¿Cómo puedo implementar una superposición emergente para una aplicación que se puede mostrar sobre cualquier otra aplicación?

Facebook implementó una característica muy similar llamada Chatheads en su nueva versión de Facebook Messanger. Estaba realmente sorprendido de ver que esto es de alguna manera posible. En la imagen, ves un chathead (perro a la derecha) sobre otra aplicación.


Cada actividad, diálogo y servicio se adjunta con una ventana. Facebook mantiene un servicio ejecutándose en segundo plano y en el servicio al que captan el objeto del administrador de ventanas

windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);

Cree los parámetros de diseño necesarios al agregar su vista

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

ahora agregue su vista al administrador de ventanas siguiendo el método

windowManager.addView(yourView, params);


Hay una biblioteca para eso si quieres el tipo de comportamiento de Messenger: Bubbles .

Si prefiere implementarlo, mire Window Manager como sugieren otros. También puedes echarle un vistazo al código fuente de Bubbles para inspirarte.


Sé que es tarde para publicar la respuesta, la publicaré de todos modos para otras personas que están buscando la respuesta

AndroidFloatingImage


This es un ejemplo mínimo, simple y general de una superposición flotante de estilo "cabeza de chat".

Utiliza el siguiente código para hacer que las cosas floten:

windowManager = (WindowManager) getSystemService(WINDOW_SERVICE); chatHead = new ImageView(this); chatHead.setImageResource(R.drawable.floating); final WindowManager.LayoutParams params = new WindowManager.LayoutParams( WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.TYPE_PHONE, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.TRANSLUCENT);

La fuente de fuente completa se puede encontrar here (bajo la licencia de Apache).


El código fuente completo está aquí: http://www.piwai.info/chatheads-basics
Nota: Necesitará <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

public class ChatHeadService extends Service { private WindowManager windowManager; private ImageView chatHead; @Override public IBinder onBind(Intent intent) { // Not used return null; } @Override public void onCreate() { super.onCreate(); windowManager = (WindowManager) getSystemService(WINDOW_SERVICE); chatHead = new ImageView(this); chatHead.setImageResource(R.drawable.android_head); WindowManager.LayoutParams params = new WindowManager.LayoutParams( WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.TYPE_PHONE, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.TRANSLUCENT); params.gravity = Gravity.TOP | Gravity.LEFT; params.x = 0; params.y = 100; windowManager.addView(chatHead, params); } @Override public void onDestroy() { super.onDestroy(); if (chatHead != null) windowManager.removeView(chatHead); } }