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

Переместить логотип Google в MapView

У меня есть две кнопки в каждом нижнем углу MapView, частично затеняя логотип google в нижнем левом углу.

Чтобы соответствовать условиям API, мне нужно переместить логотип google в другое место. то есть над кнопкой.

В документе google API указано, что логотип google находится в методе onDraw() MapView, но я не знаю, как его правильно переопределить, поскольку карты google закрыты.

Я мог бы сделать это в iPhone, найдя правильный UIView в MKMapView's, но я не могу понять, как это сделать в Android.

4b9b3361

Ответ 1

Google Maps SDK v2 для Android добавляет эту функциональность.

Используйте GoogleMap.setPadding() для добавления отступов в "активную" область (включая логотип Google и уведомления об авторских правах) при заполнении полного контейнера.

https://developers.google.com/maps/documentation/android/map#map_padding

Ответ 2

У меня была такая же проблема, но вы можете достичь того, чего хотите, не противореча с Условиями использования Google. Главное - добавить mapView в макет кадра, например:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"     
 android:orientation="vertical" >          

 <FrameLayout android:id="@+id/map_frame"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:layout_weight="0.7" >     

    <com.google.android.maps.MapView
        android:id="@+id/map_view" 
        android:layout_width="fill_parent"
        android:layout_height="match_parent" 
        android:enabled="true" 
        android:clickable="true"             
        android:apiKey="mySecretMapsApiKey"/>

 </FrameLayout>

 <ws.mentis.android.guardian.ui.MapNavBar
    android:id="@+id/map_nav"
    android:layout_width="fill_parent"
    android:layout_height="70dip"
    android:layout_gravity="bottom"
    android:layout_weight="0.3" /> 

 </LinearLayout>

У меня было несколько кнопок для включения, поэтому я создал их в пользовательском виджетах (MapNavBar). Как вы можете видеть на снимке экрана, логотип Google по-прежнему отображается и находится в нормальном месте в новом окне.

Screenshot of MapView

Это работает в Android 2.2 Также имеет преимущество, что стандартный зум-контроль также перемещается вверх, поэтому он не мешает вашим собственным кнопкам.

Ответ 3

Вы можете переместить логотип Google с помощью назначенного ему тега GoogleWatermark. В приведенном ниже коде я переместил его в верхний правый угол экрана.

View googleLogo = binding.missionMap.findViewWithTag("GoogleWatermark");
RelativeLayout.LayoutParams glLayoutParams = (RelativeLayout.LayoutParams)googleLogo.getLayoutParams();
glLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, 0);
glLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT, 0);
glLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_START, 0);
glLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE);
glLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_END, RelativeLayout.TRUE);
googleLogo.setLayoutParams(glLayoutParams);

где missionMap - это кадр, к которому добавлен MapFragment.

Ответ 4

Из документации:

protected final void onDraw(android.graphics.Canvas canvas)

onDraw - окончательный метод. Это не может быть переопределено вообще.

Вы также можете показать свои кнопки ниже mapview в макете, выровненной до нижней части родителя. Таким образом, вы можете иметь кнопки в том месте, где вам нравится, и это не закроет ваш логотип Google.

Ответ 5

Действительно старый вопрос, но, возможно, кто-то воспользуется им. Я заставил его появиться в правом верхнем углу:

Rect rect = new Rect()
mMapView.getLocalVisibleRect(rect)
googleMap.setPadding(rect.width() - 100, 0, 0, rect.height() - 50)

Если вы хотите разместить его в другом месте, вам нужно будет повеселиться с помощью setPadding

Также не забудьте скрыть кнопки пользовательского интерфейса на картах google:

googleMap.getUiSettings().setMapToolbarEnabled(false)
googleMap.getUiSettings().setZoomControlsEnabled(false)
googleMap.getUiSettings().setMyLocationButtonEnabled(false)

Существует одна (по крайней мере) проблема. При использовании карты камеры в центре на данной точке не будет работать должным образом. Если требуется движение камеры, лучше просто установить отступ к видимому фрагменту карты, и он должен работать правильно. Используйте rect, чтобы узнать, какие размеры помещать в setPadding

Ответ 6

Вид взлома, но вы можете попробовать добавить MapView его к FrameLayout,, чтобы установить высоту MapView X dp больше, чем FrameLayout, чтобы она обрезалась, и добавление логотипа Drawable где бы вы ни хотели.

Ответ 7

Я достиг этого, сделав следующее.

<RelativeLayout
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:layout_marginBottom="-30dp"
  android:layout_marginTop="-30dp">

   <fragment
      android:id="@+id/map_frag_main"
      android:name="com.google.android.gms.maps.SupportMapFragment"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      tools:context=".MainActivity" />

</RelativeLayout>

Это уберет логотип Google и не потребует заполнения, просто убедитесь, что вы добавили рисование, или вы будете нарушать TOS.

Ответ 8

Вам не нужно ничего делать, кроме использования заполнения для объекта GoogleMap, как указано в документации по Google Maps. Примечание. Согласно условиям предоставления услуг платформы Google Maps, ваше приложение не должно удалять или скрывать логотип Google или уведомления об авторских правах. Заполнение карты позволяет при необходимости изменить положение этих элементов. Если пользовательский интерфейс отображается внизу карты, добавьте отступы внизу карты, чтобы логотип и официальные уведомления всегда были видны.