web-dev-qa-db-de.com

Mehrere Zeilen oder Zeilenumbrüche in .snippet (google maps apiv2)

Ich entwickle in Google Maps APIv2. Das Problem, mit dem ich jetzt konfrontiert bin, ist, dass ich nur in einer Zeile Word in Infofenstern/Snippet hinzufügen kann. Die Ausgabe, die ich möchte, kann jedoch in Form einer Trennlinie angezeigt werden, wie im folgenden Beispiel gezeigt. Gibt es also irgendwelche möglichen Methoden, um das Problem zu lösen?

Beispiel:

Koordinate: 03.05085, 101.70506

Geschwindigkeitsbegrenzung: 80 km/h

public class MainActivity extends FragmentActivity {
  static final LatLng SgBesi = new LatLng(03.05085, 101.76022);
  static final LatLng JB = new LatLng(1.48322, 103.69065);
  private GoogleMap map;


  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    map = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map))
            .getMap();

    map.addMarker(new MarkerOptions().position(SgBesi)
        .title("KM D7.7 Sungai Besi")               //name
        .snippet("Coordinate: 03.05085, 101.70506"));   //description

    map.addMarker(new MarkerOptions().position(JB)
        .title("test") 
        .snippet("Hey, how are you?")); 

       // .icon(BitmapDescriptorFactory  //set icon
       //     .fromResource(R.drawable.ic_launcher)));

    // move the camera instantly with a zoom of 15.
    map.moveCamera(CameraUpdateFactory.newLatLngZoom(SgBesi, 15));

    // zoom in, animating the camera.       
    map.animateCamera(CameraUpdateFactory.zoomTo(15), 2000, null);
   }
}
10
KS Tan

Sie müssen einen benutzerdefinierten InfoWindowAdapter verwenden, um das Layout von InfoWindow in ein benutzerdefiniertes Design zu ändern, das mithilfe einer Layoutdatei definiert wurde. Grundsätzlich müssen Sie:

  1. Deklarieren Sie Ihre Funktion mit GoogleMap.setInfoWindowAdapter(Yourcustominfowindowadpater)
  2. Haben Sie eine Klasse wie folgt:

...

class Yourcustominfowindowadpater implements InfoWindowAdapter {
    private final View mymarkerview;

    Yourcustominfowindowadpater() {
        mymarkerview = getLayoutInflater()
            .inflate(R.layout.custominfowindow, null); 
    }

    public View getInfoWindow(Marker marker) {      
        render(marker, mymarkerview);
        return mymarkerview;
    }

    public View getInfoContents(Marker marker) {
       return null;
    }

    private void render(Marker marker, View view) {
       // Add the code to set the required values 
       // for each element in your custominfowindow layout file
    }
}
21
tony m

Sie müssen InfoWindowAdapter verwenden, um benutzerdefinierte Informationsfenster zu erstellen. Die Standardimplementierung entfernt irgendwie Zeilenumbrüche aus dem Snippet, was als kleiner Fehler angesehen werden kann.

0
MaciejGórski

Ich möchte @tony etwas hinzufügen. Laut Dokumentation können Sie Ihrer benutzerdefinierten Ansicht keine Aktion hinzufügen, da sie zur Laufzeit als Bild gezeichnet wird.

Hinweis: Das gezeichnete Infofenster ist keine Live-Ansicht. Die Ansicht wird bei der Rückgabe als Bild (mithilfe von View.draw (Canvas)) gerendert. Dies bedeutet, dass spätere Änderungen an der Ansicht nicht im Infofenster auf der Karte angezeigt werden. Rufen Sie showInfoWindow () auf, um das Informationsfenster später zu aktualisieren (z. B. nachdem ein Bild geladen wurde). Darüber hinaus berücksichtigt das Infofenster keine für eine normale Ansicht typische Interaktivität wie Berührungs- oder Gestenereignisse. Sie können sich jedoch ein generisches Klickereignis im gesamten Infofenster anhören, wie im folgenden Abschnitt beschrieben.

0
Mina Fawzy