web-dev-qa-db-fra.com

Android Google Maps v2: Comment ajouter un marqueur avec un extrait de code multiligne?

Quelqu'un sait-il comment ajouter un extrait de code multiligne au marqueur Google Maps? C'est mon code pour ajouter des marqueurs:

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

Je veux que l'extrait ressemble à ceci:

| HEADER |
|foo     |
|bar     |

mais lorsque j'essaie de définir snippetText sur "foo\n bar", je ne vois que foo bar et je ne sais pas comment le rendre multiligne. Pouvez-vous m'aider?

63
uncle Lem

Il semble que vous deviez créer votre propre contenu de "fenêtre d'information" pour que cela fonctionne:

  1. Créez une implémentation de InfoWindowAdapter qui remplace getInfoContents() pour renvoyer ce que vous voulez entrer dans le cadre InfoWindow

  2. Appelez setInfoWindowAdapter() sur votre GoogleMap en passant une instance de votre InfoWindowAdapter

Cet exemple de projet illustre la technique. Remplacement de mes extraits avec "foo\nbar" traite correctement la nouvelle ligne. Cependant, plus probablement, vous ne ferez que mettre en page une disposition qui évite d'avoir à utiliser la nouvelle ligne, avec des widgets TextView distincts pour chaque ligne des résultats visuels souhaités.

58
CommonsWare

J'ai fait de la manière la plus simple comme ci-dessous:

private GoogleMap mMap;

Alors que ajoutmarqueur sur 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)));

Après cela, mettez le code ci-dessous pour InfoWindowadaptateur sur 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;
    }
});

J'espère que cela vous aidera.

113
Hiren Patel

S'appuyant sur réponse de Hiren Patel comme Andrew S l'avait suggéré:

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