Weiß jemand, wie man dem Google Maps-Marker ein mehrzeiliges Snippet hinzufügt? Das ist mein Code zum Hinzufügen von Markern:
map.getMap().addMarker(new MarkerOptions()
.position(latLng()).snippet(snippetText)
.title(header).icon(icon));
Ich möchte, dass das Snippet so aussieht:
| HEADER |
|foo |
|bar |
Aber wenn ich versuche, snippetText auf "foo \ n bar" zu setzen, sehe ich nur foo bar
und ich habe keine Ideen, wie ich es mehrzeilig machen kann. Kannst du mir helfen?
quelle
RelativeLayout
als Root verwenden und diese aufblasen, möchten Sie normalerweise die Drei-Parameter-inflate()
Methode verwenden, die im übergeordneten ElementViewGroup
undfalse
für die letzten beiden Parameter übergeben wird. Wir werden jedoch nicht als Eltern übergebengetInfoContents()
, daher können wir das nicht tun. Ich bin zwar ein bisschen überrascht über aNullPointerException
, aber ich bin überhaupt nicht überrascht, dass dasRelativeLayout
nicht richtig funktioniert. Ich hätte erwartet, dass einige der Layoutregeln für dieRelativeLayout
Kinder des Kindes ignoriert werden oder sich auf andere Weise schlecht benehmen.Maps V2 Chapter
aus Ihrem 4.6-Buch und habe eine Frage zum Thema mit dieser Frage, daher denke ich, dass dies ein guter Ort ist, um sie zu stellen. Ich frage mich, ob es eine Möglichkeit gibt,infoWindow
für jeden Marker eine eindeutige Einstellung festzulegen, solange diessetInfoWindowAdapter()
auf die Lochkarte angewendet wird.setText()
dieTextViews
, nicht anders alsTextViews
in einer Aktivität, Fragment,ListView
Zeile, etc.Ich habe es auf einfachste Weise wie folgt gemacht:
private GoogleMap mMap;
Beim Hinzufügen eines Markers auf 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)));
Geben Sie anschließend den folgenden Code für den InfoWindow- Adapter in Google Map ein :
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; } });
Hoffe es wird dir helfen.
quelle
snippet
.Code Snippet
. Hat mir Zeit gespart. Auch ich magmMap
Variablennamen, weil ich das auch nicht geändert habe.Aufbauend auf Hiren Patels Antwort, wie Andrew S vorschlug:
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; } });
quelle
Basierend auf der Hiren Patel Lösung. Dieser Code erstellt ein
TextView
from-Layout, nicht from zero. Ein wesentlicher Unterschied: Wenn Sie Cluster haben , wird beim Klicken auf einen Cluster keine leere Bezeichnung angezeigt.override fun onMapReady(googleMap: GoogleMap) { this.googleMap = googleMap ... // Use this anonymous class or implement GoogleMap.InfoWindowAdapter. googleMap.setInfoWindowAdapter(object : GoogleMap.InfoWindowAdapter { override fun getInfoContents(marker: Marker): View? { return null } override fun getInfoWindow(marker: Marker): View? = if (marker.title == null) null else { val inflater = LayoutInflater.from(context) val view = inflater.inflate(R.layout.layout_marker, null, false) view.label.text = marker.title view } })
layout_marker.xml:
<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/label" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingLeft="5dp" android:paddingRight="5dp" android:paddingTop="4dp" android:paddingBottom="4dp" android:textColor="$f0f0f0" android:textSize="12sp" tools:text="Marker" android:background="#00aaee" />
quelle
Gleicher Code, aber in Kotlin:
mMap?.setInfoWindowAdapter(object : InfoWindowAdapter { override fun getInfoWindow(arg0: Marker): View? { return null } override fun getInfoContents(marker: Marker): View { val info = LinearLayout(applicationContext) info.orientation = LinearLayout.VERTICAL val title = TextView(applicationContext) title.setTextColor(Color.BLACK) title.gravity = Gravity.CENTER title.setTypeface(null, Typeface.BOLD) title.text = marker.title val snippet = TextView(applicationContext) snippet.setTextColor(Color.GRAY) snippet.text = marker.snippet info.addView(title) info.addView(snippet) return info } })
quelle
mMap.setOnMapClickListener (neuer GoogleMap.OnMapClickListener () {
@Override public void onMapClick(LatLng point) { // Already two locations if (markerPoints.size() > 1) { markerPoints.clear(); mMap.clear(); } // Adding new item to the ArrayList markerPoints.add(point); // Creating MarkerOptions MarkerOptions options = new MarkerOptions(); // Setting the position of the marker options.position(point); if (markerPoints.size() == 1) { options.icon(BitmapDescriptorFactory.fromResource(R.mipmap.markerss)).title("Qtrip").snippet("Balance:\nEta:\nName:"); options.getInfoWindowAnchorV(); } else if (markerPoints.size() == 2) { options.icon(BitmapDescriptorFactory.fromResource(R.mipmap.markerss)).title("Qtrip").snippet("End"); } 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; } }); mMap.addMarker(options);
quelle