Ventanas de información

Las ventanas de información son cuadros emergentes que muestran texto o imágenes encima del mapa. Están siempre ancladas a un marcador y, de forma predeterminada, aparecen cuando se presiona el marcador.

Muestras de código

El repositorio ApiDemos en GitHub incluye un ejemplo que muestra todas las funciones de una ventana de información:

  • MarkerDemoActivity: Personalización de las ventanas de información y uso de sus objetos de escucha

Introducción

Las ventanas de información te permiten mostrarle información a un usuario cuando este presiona un marcador. Solo se muestra una de estas ventanas a la vez. Si un usuario hace clic en un marcador, se cerrará la ventana de información actual y se mostrará la nueva. Ten en cuenta que, si el usuario hace clic en un marcador que actualmente muestra una ventana de información, se cerrará y se volverá a abrir esa misma ventana.

Las ventanas de información siempre se dibujan respecto de la pantalla del dispositivo, centradas encima del marcador asociado. La ventana de información predeterminada contiene el título en negrita y, abajo, el texto del fragmento de código (opcional).

Agrega una ventana de información

La manera más simple de agregar una ventana de información es configurar los métodos title() y snippet() del marcador correspondiente. Si se configuran dichas propiedades, se mostrará una ventana de información siempre que se haga clic en el marcador.

static final LatLng MELBOURNE = new LatLng(-37.81319, 144.96298);
    Marker melbourne = mMap.addMarker(new MarkerOptions()
                              .position(MELBOURNE)
                              .title("Melbourne")
                              .snippet("Population: 4,137,400"));
    

Muestra u oculta una ventana de información

Las ventanas de información están diseñadas para responder a eventos táctiles de los usuarios. Si lo prefieres, puedes hacer que se muestre una ventana de información de manera programática. Para ello, llama a showInfoWindow() en el marcador de orientación. Llama a hideInfoWindow() para ocultarla.

static final LatLng MELBOURNE = new LatLng(-37.81319, 144.96298);
    Marker melbourne = mMap.addMarker(new MarkerOptions()
                              .position(MELBOURNE)
                              .title("Melbourne"));
    melbourne.showInfoWindow();
    

También puedes crear ventanas de información para cada uno de los marcadores agrupados en clúster. Consulta la guía sobre cómo crear ventanas de información para cada uno de los marcadores agrupados en clúster.

Ventanas de información personalizadas

También puedes personalizar el contenido y el diseño de las ventanas de información. Para ello, debes crear una implementación concreta de la interfaz InfoWindowAdapter y, luego, llamar a GoogleMap.setInfoWindowAdapter() con tu implementación. La interfaz contiene dos métodos que debes implementar: getInfoWindow(Marker) y getInfoContents(Marker). Primero, la API llamará a getInfoWindow(Marker) y, si se muestra la respuesta null, llamará a getInfoContents(Marker). Si también se muestra la respuesta null, se utilizará la ventana de información predeterminada.

La primera respuesta (getInfoWindow()) te permite proporcionar una vista que se utilizará para toda la ventana de información. La segunda respuesta (getInfoContents()) te permite personalizar el contenido de la ventana, manteniendo el marco y el fondo de la ventana de información predeterminada.

En las siguientes imágenes, se muestran tres ventanas de información: una predeterminada, otra con contenido personalizado y otra con el marco y el fondo personalizados.

Comparación de las distintas ventanas de información

Eventos de la ventana de información

En el ejemplo MarkerDemoActivity, se incluye código de ejemplo para registrar y controlar eventos de la ventana de información.

Puedes utilizar un objeto OnInfoWindowClickListener a fin de escuchar los eventos de clic en una ventana de información. Para configurar este objeto de escucha en el mapa, llama a GoogleMap.setOnInfoWindowClickListener(OnInfoWindowClickListener). Cuando un usuario haga clic en una ventana de información, se llamará a onInfoWindowClick(Marker) y se resaltará la ventana de información en el color para resaltar predeterminado (gris).

public class MarkerDemoActivity extends AppCompatActivity implements
            OnInfoWindowClickListener,
            OnMapReadyCallback {

        private GoogleMap mMap;

        @Override
        public void onMapReady(GoogleMap map) {
            mMap = map;
            // Add markers to the map and do other map setup.
            ...
            // Set a listener for info window events.
            mMap.setOnInfoWindowClickListener(this);
        }

        @Override
        public void onInfoWindowClick(Marker marker) {
            Toast.makeText(this, "Info window clicked",
                    Toast.LENGTH_SHORT).show();
        }
    }
    

De manera similar, puedes utilizar un objeto OnInfoWindowLongClickListener a fin de escuchar eventos de clic largo. Para configurarlo, llama a GoogleMap.setOnInfoWindowLongClickListener(OnInfoWindowLongClickListener). Este objeto de escucha se comporta de manera similar al de clics y recibirá notificaciones de eventos de clic largo con una devolución de llamada onInfoWindowLongClick(Marker).

Si deseas recibir una notificación cuando se cierre la ventana de información, utiliza un objeto de escucha OnInfoWindowCloseListener. Para configurarlo, llama a GoogleMap.setOnInfoWindowCloseListener(OnInfoWindowCloseListener). Recibirás una devolución de llamada onInfoWindowClose(Marker).

Nota sobre la actualización de las ventanas de información: Se activará el evento onInfoWindowClose() si el usuario presiona un marcador que ya tenga una ventana de información abierta para actualizarla. Sin embargo, si llamas a Marker.showInfoWindow() de forma programática en una ventana de información abierta, no se activará el evento onInfoWindowClose(). Este último comportamiento se basa en la suposición de que sabes que la ventana de información se cerrará y se volverá a abrir.

Como se mencionó en la sección anterior sobre ventanas de información, estas no son vistas en tiempo real, sino que se renderizan como imágenes en el mapa. Como resultado, se omitirán los objetos de escucha que configures en la vista, y no podrás distinguir entre los diferentes eventos de clic en las distintas secciones de la vista. Se recomienda que no coloques componentes interactivos (como botones, casillas de verificación o cuadros para ingresar texto) en tu ventana de información personalizada.