Android Google Maps v2: как добавить маркер с многострочным фрагментом?
Кто-нибудь знает, как добавить многострочный фрагмент в Google Maps? Что мой код для добавления маркеров:
map.getMap().addMarker(new MarkerOptions()
.position(latLng()).snippet(snippetText)
.title(header).icon(icon));
Я хочу, чтобы фрагмент выглядел так:
| HEADER |
|foo |
|bar |
но когда я пытаюсь установить snippetText в "foo\n bar", я вижу только foo bar
, и у меня нет никаких идей, как сделать его многострочным. Можете ли вы мне помочь?
Ответы
Ответ 1
Похоже, вам нужно создать собственное содержимое "информационного окна", чтобы сделать эту работу:
-
Создайте реализацию InfoWindowAdapter
, которая переопределяет getInfoContents()
, чтобы вернуть то, что вы хотите вставить в рамку InfoWindow
-
Вызовите setInfoWindowAdapter()
на GoogleMap
, передав экземпляр вашего InfoWindowAdapter
Этот примерный проект демонстрирует технику. Замена моих фрагментов "foo\nbar"
корректно обрабатывает новую строку. Однако, скорее всего, вы просто придумаете макет, который позволит избежать необходимости в новой строке, с отдельными виджетами TextView
для каждой строки в ваших желаемых визуальных результатах.
Ответ 2
Я сделал с самым простым способом, как показано ниже:
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)));
После этого введите InfoWindow адаптер в Карте Google:
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;
}
});
Надеюсь, это поможет вам.
Ответ 3
Основываясь на Hiren Patel answer, как предложил Andrew S:
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;
}
});