¿Qué API en Android está usando Facebook para crear Cabezas de Chat?


¿Cómo crea Facebook los Jefes de Chat en Android? ¿Qué es la API para crear las vistas flotantes sobre todas las demás vistas?

Author: Vadim Kotov, 2013-04-12

3 answers

Este uno:

Permite que una aplicación abra ventanas usando el tipo TYPE_SYSTEM_ALERT, que se muestra encima de todas las demás aplicaciones. Muy pocas aplicaciones deben usar este permiso; estas ventanas están destinadas para la interacción a nivel de sistema con el usuario.

Valor constante: "android.permiso.SYSTEM_ALERT_WINDOW "

//EDITAR: El código completo aquí:

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);
  }
}

No se olvide de iniciar el servicio de alguna manera:

startService(new Intent(context, ChatHeadService.class));

.. Y añade este servicio a tu Manifiesto.

 212
Author: Waza_Be,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-03 20:21:11

Como regla general, las actividades de Android son a pantalla completa, IU conceptualmente dedicadas que toman toda la interacción. Hay algunas excepciones a esto. Para empezar, hay cuadros de diálogo que no llenan la pantalla. Otro es el Android toast, que es una ventana emergente no interactiva - no se puede tocar, y si lo intentas va a ir a lo que hay debajo.

También puedes hacer tus propias UIs especiales. Puede agregar vistas directamente a WindowManager, especificando un indicador de tipo. Jefes de chat probablemente utiliza TYPE_PHONE . Hay algunos tipos similares, pero el propósito es el mismo: superposiciones de propósito especial que pueden aparecer sobre cualquier otra cosa sin que la aplicación padre aparentemente esté presente.

Eso solo te lleva hasta cierto punto, sin embargo, debido a problemas con la 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.

Usted configura este comportamiento usando el LayoutParams. FLAG_NOT_TOUCH_MODAL significa que los eventos fuera del área de visualización van a las IU subyacentes. Ahora encontrará que funciona, pero que otras cosas malas todavía suceden, como los botones atrás/menú no se dirigen a las aplicaciones, además de que no hay teclado. Para resolver eso necesitas FLAG_NOT_FOCUSABLE.

También obtienes un efecto secundario de la parte no enfocable, que ya no tiene interacciones agradables con tu superposición, por ejemplo, al presionar un botón. Sin embargo, puede obtener algunos eventos táctiles básicos, en los que siempre puede hacer matemáticas, y eso es probablemente suficiente para los Charlatanes. Solo ten en cuenta que te deja solo en muchas áreas, como la animación de la interfaz de usuario.

Una buena visión general de los detalles, incluyendo permitir el consumo de interacción selectiva, se puede encontrar en este hilo de StackOverflow. En particular, uno de los enlaces de respuesta eventualmente lo llevará aquí, que es un buen proyecto de ejemplo. Tenga en cuenta que ICS cambió cómo funciona esto un poco, pero los hilos lo explican.

Todo Esto es público Cosas API, pero en realidad no parece una cosa corriente que uno debería estar haciendo como una cuestión de curso. La documentación está llena de referencias a comportamientos especiales de las aplicaciones del sistema, y con una buena razón; ¿qué pasaría si todo el mundo lo hiciera?

 50
Author: Rob Pridham,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:54:51

Springy heads proporciona un comportamiento basado en la primavera de los jefes de chat fuera de la caja. Todo lo que tienes que definir es el elemento de diseño para el chat head y el fragmento que se abrirá una vez que se haga clic en el chat head. Los cabezales de chat se colapsan cuando se minimizan y siguen el dedo cuando se arrastran.

El proyecto incluye una aplicación de demostración que demuestra toda la funcionalidad incorporada. Para usarlo, necesitas agregarlo a tus dependencias de gradle.

compile 'com.flipkart.springyheads:library:0.9.6'
 7
Author: Kiran Kumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-28 00:12:09