有人知道如何将多行代码段添加到Google地图标记中吗?这是我添加标记的代码:
map.getMap().addMarker(new MarkerOptions()
.position(latLng()).snippet(snippetText)
.title(header).icon(icon));
我希望代码段看起来像这样:
| HEADER |
|foo |
|bar |
但是当我尝试将snippetText设置为“foo \ n bar”时,我只看到foo bar
,我没有任何想法如何使其成为多行。你能救我吗?
答案 0 :(得分:110)
我用最简单的方式完成了以下工作:
private GoogleMap mMap;
在 Google地图上添加 标记时:
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)));
之后在 Google地图上的 InfoWindow 适配器下面添加代码:
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;
}
});
希望它会对你有所帮助。
答案 1 :(得分:58)
看起来您需要创建自己的“信息窗口”内容才能实现这一目标:
创建InfoWindowAdapter
的实施,覆盖getInfoContents()
以返回您想要进入InfoWindow
框架的内容
在setInfoWindowAdapter()
上致电GoogleMap
,并传递InfoWindowAdapter
This sample project演示了这项技巧。用"foo\nbar"
替换我的代码段正确处理换行符。但是,更有可能的是,您只需提出一个布局,避免使用换行符,并在所需的视觉效果中为每一行添加单独的TextView
小部件。
答案 2 :(得分:13)
以安德鲁S建议的Hiren Patel's answer为基础:
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;
}
});
答案 3 :(得分:1)
基于Hiren Patel解决方案。此代码从布局而不是从零创建TextView
。一个重大区别:如果您有集群,则在单击集群时不会看到无效标签。
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"
/>
答案 4 :(得分:0)
相同的代码,但使用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
}
})
答案 5 :(得分:-1)
mMap.setOnMapClickListener(新的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);