¿Cómo crea Facebook los Chat Heads en Android? ¿Cuál es la API para crear las vistas flotantes sobre todas las demás vistas?
android
facebook
android-windowmanager
Daniel A. White
fuente
fuente
Respuestas:
Este :
// EDITAR: el código completo aquí :
No olvide iniciar el servicio de alguna manera:
.. Y agregue este servicio a su Manifiesto.
fuente
Como regla general, las actividades de Android son UI de pantalla completa, conceptualmente dedicadas que toman toda la interacción. Hay algunas excepciones a esto. Para empezar, hay cuadros de diálogo emergentes que no llenan la pantalla. Otro es el brindis de Android, que es una ventana emergente no interactiva: no puede tocarlo y, si lo intenta, irá a lo que esté debajo.
También puedes hacer tus propias IU especiales. Puede agregar vistas directamente al
WindowManager
, especificando un indicador de tipo. Chat Heads probablemente usa TYPE_PHONE . Hay algunos tipos similares, pero el propósito es el mismo: superposiciones de propósito especial que pueden aparecer sobre la parte superior de cualquier otra cosa sin que la aplicación principal aparentemente esté presente.Sin embargo, eso solo te lleva muy lejos, debido a problemas de interacción. Al principio, su superposición absorberá toda la interacción, por lo que no solo la cabeza recibe eventos, sino que bloquea la interacción con todo lo que está debajo.
Configura este comportamiento utilizando los LayoutParams .
FLAG_NOT_TOUCH_MODAL
significa que los eventos fuera de su área de visualización van a las IU subyacentes. Ahora descubrirá que funciona, pero que otras cosas malas aún suceden, como los botones de retroceso / menú no se dirigen a las aplicaciones, además de que no hay teclado. Para resolver eso que necesitasFLAG_NOT_FOCUSABLE
.También obtiene un efecto secundario del bit no enfocable, que ya no es una buena interacción con su superposición, por ejemplo, al presionar botones. Sin embargo, puede obtener algunos eventos táctiles básicos, en los que siempre puede hacer cálculos, y eso probablemente sea suficiente para Chat Heads. Solo tenga en cuenta que lo deja solo en muchas áreas, como la animación de la interfaz de usuario.
Una buena visión general de los detalles, incluyendo el permitir para el consumo interacción selectiva, se puede encontrar en este hilo StackOverflow . En particular, uno de los enlaces de respuesta te llevará eventualmente aquí , lo cual es un buen proyecto de ejemplo. Tenga en cuenta que ICS cambió un poco la forma en que esto funciona, pero los hilos lo explican.
Todo esto es material público de API, pero en realidad no parece una cosa convencional que uno debería estar haciendo de forma natural. La documentación está llena de referencias a comportamientos especiales de la aplicación del sistema, y con buenas razones; ¿Y si todos lo hicieran?
fuente
Springy heads ofrece un comportamiento basado en la primavera de los chat heads fuera de la caja. Todo lo que tiene que definir es el dibujo del encabezado del chat y el fragmento que se abrirá una vez que se haga clic en el encabezado del chat. Las cabezas de chat colapsan cuando se minimizan y siguen el dedo cuando se arrastran.
El proyecto incluye una aplicación de demostración que muestra todas las funciones integradas. Para usarlo, debe agregar esto a sus dependencias de gradle.
fuente