2012-12-16 9 views
55

Qualcuno sa come aggiungere lo snippet multilinea all'indicatore di Google Maps? Questo è il mio codice per i marcatori aggiungendo:Android Google Maps v2: Come aggiungere un marker con lo snippet multiline?

map.getMap().addMarker(new MarkerOptions() 
    .position(latLng()).snippet(snippetText) 
    .title(header).icon(icon)); 

voglio frammento di simile a questa:

| HEADER | 
|foo  | 
|bar  | 

ma quando sto cercando di impostare snippetText a "\ n foo bar", vedo solo foo bar e non ho idee su come renderlo multilinea. Mi potete aiutare?

risposta

51

Sembra che è necessario creare i propri contenuti "Finestra Info" per fare quel lavoro:

  1. Creare un'implementazione di InfoWindowAdapter che sostituisce getInfoContents() di restituire ciò che si vuole andare nella cornice InfoWindow

  2. chiamata setInfoWindowAdapter() sul GoogleMap, passando un'istanza della InfoWindowAdapter

This sample project dimostra la tecnica. La sostituzione dei miei frammenti con "foo\nbar" elabora correttamente la nuova riga. Tuttavia, più probabilmente, ti verrà in mente un layout che evita la necessità di una nuova riga, con distinti widget TextView per ogni riga nei risultati visivi desiderati.

+0

Se utilizzati getInfoWindow() per restituire una visione del tutto personalizzata, notare che sembra che ci sia un errore quando si utilizza un RelativeLayout per esso. Potrei far funzionare il mio solo quando si passa a un LinearLayout. Ho archiviato un bug report: http://code.google.com/p/gmaps-api-issues/issues/detail?id=4874 – Till

+0

@Till: in genere, quando si utilizza una risorsa di layout con un 'RelativeLayout' come root, quando lo si gonfia, si desidera utilizzare il metodo 'inflate()' a tre parametri, passando il 'ViewGroup' padre e' false' per gli ultimi due parametri. Tuttavia, non viene passato un genitore in 'getInfoContents()', quindi non possiamo farlo. Mentre sono un po 'sorpreso di un 'NullPointerException', non mi sorprende affatto che il' RelativeLayout' non funzioni correttamente. Mi sarei aspettato che alcune delle regole di layout per i figli di 'RelativeLayout' venissero ignorate o altrimenti non funzionassero. – CommonsWare

+0

@CommonsWare Sto leggendo il 'Maps V2 Chapter' dal tuo 4.6 libro e ho una domanda che è in discussione con questa domanda, quindi penso che sia un buon posto per chiedere. Vago se c'è un modo per impostare un distinto 'infoWindow' per ogni marcatore, purché' setInfoWindowAdapter() 'sia applicato alla mappa del buco? – AlexAndro

82

che ho fatto con il modo più semplice, come di seguito:

private GoogleMap mMap; 

Mentre aggiungendomarcatore sulla Google Map:

LatLng mLatLng = new LatLng(YourLatitude, YourLongitude); 

mMap.addMarker(new MarkerOptions().position(mLatLng).title("My Title").snippet("My Snippet"+"\n"+"1st Line Text"+"\n"+"2nd Line Text"+"\n"+"3rd Line Text").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED))); 

dopo che ha messo sotto il codice per InfoWindowadattatore su Google Map:

mMap.setInfoWindowAdapter(new GoogleMap.InfoWindowAdapter() { 

     @Override 
     public View getInfoWindow(Marker arg0) { 
     return null; 
     } 

     @Override 
     public View getInfoContents(Marker marker) { 

     LinearLayout info = new LinearLayout(mContext); 
     info.setOrientation(LinearLayout.VERTICAL); 

     TextView title = new TextView(mContext); 
     title.setTextColor(Color.BLACK); 
     title.setGravity(Gravity.CENTER); 
     title.setTypeface(null, Typeface.BOLD); 
     title.setText(marker.getTitle()); 

     TextView snippet = new TextView(mContext); 
     snippet.setTextColor(Color.GRAY); 
     snippet.setText(marker.getSnippet()); 

     info.addView(title); 
     info.addView(snippet); 

     return info; 
    } 
}); 

Spero che vi aiuterà.

+0

È una buona soluzione ma non totale. Gestisce le nuove linee ma omette il titolo. E 'un buon inizio e pensare che il resto dovrebbe essere facile per la maggior parte. –

+1

Questa soluzione funziona davvero. +1 per aggiungere un esempio di codice. – MetaSnarf

+1

Gestisce il titolo e molte righe di snippet. Grazie. – Yar

13

Sulla Hiren Patel's answer come Andrew S suggerito:

mMap.setInfoWindowAdapter(new GoogleMap.InfoWindowAdapter() { 

     @Override 
     public View getInfoWindow(Marker arg0) { 
      return null; 
     } 

     @Override 
     public View getInfoContents(Marker marker) { 

      Context context = getApplicationContext(); //or getActivity(), YourActivity.this, etc. 

      LinearLayout info = new LinearLayout(context); 
      info.setOrientation(LinearLayout.VERTICAL); 

      TextView title = new TextView(context); 
      title.setTextColor(Color.BLACK); 
      title.setGravity(Gravity.CENTER); 
      title.setTypeface(null, Typeface.BOLD); 
      title.setText(marker.getTitle()); 

      TextView snippet = new TextView(context); 
      snippet.setTextColor(Color.GRAY); 
      snippet.setText(marker.getSnippet()); 

      info.addView(title); 
      info.addView(snippet); 

      return info; 
     } 
    }); 
Problemi correlati