Подтвердить что ты не робот

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, и у меня нет никаких идей, как сделать его многострочным. Можете ли вы мне помочь?

4b9b3361

Ответ 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;
        }
    });