在MapView中重新定位Google徽标

时间:2011-08-03 08:13:48

标签: android google-maps android-mapview

MapView的每个底角都有两个按钮,部分遮挡了左下角的Google徽标。

为了遵守API的条款和条件,我需要将Google徽标重新定位到更加明显的位置。即在按钮上方。

谷歌API文档指出谷歌徽标是用onDraw() MapView方法绘制的,但我不知道如何正确覆盖它,因为谷歌地图是封闭源。

我可以通过在UIView孩子中找到正确的MKMapView's来在iPhone中执行此操作,但我无法弄清楚如何在Android中执行此操作。

7 个答案:

答案 0 :(得分:30)

适用于Android的Google Maps SDK v2添加了此功能。

使用GoogleMap.setPadding()添加填充到“有效”区域(包括Google徽标和版权声明),同时仍然填充整个容器。

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

答案 1 :(得分:8)

我遇到了同样的问题,但您可以在不违反Google条款的情况下实现您的目标。主要是将mapView放在Frame布局中,例如:

<?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 它还具有标准变焦控制也向上移动的优点,因此它不会干扰您自己的按钮。

答案 2 :(得分:4)

来自文档:

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

onDraw是最终方法。 根本无法覆盖。

您也可以在布局中将您的按钮显示在与父底部对齐的布局中。这样,您可以在您喜欢的位置放置按钮,并且不会遮挡您的Google徽标。

答案 3 :(得分:1)

真的很老问题,但也许有人会利用它。我让它出现在右上角:

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

如果你想把它放在其他地方,你需要玩setPadding

也不要忘记隐藏Google地图的UI按钮:

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

有一个(至少)问题。 使用相机在给定点上居中地图时将无法正常工作。如果需要相机移动,最好将填充设置为可见的地图片段,它应该正常工作。使用rect来了解要放入setPadding

的维度

答案 4 :(得分:0)

有点骇客,但您可以尝试将MapView添加到FrameLayout,设置,MapView X dp的高度大于FrameLayout,这样就可以了剪掉,并在任何您想要的地方添加徽标Drawable

答案 5 :(得分:0)

我做到了以下几点。

<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。

答案 6 :(得分:-1)

除了谷歌地图文档中所述的对GoogleMap对象使用填充之外,您无需执行其他任何操作 注意:根据Google Maps Platform服务条款,您的应用程序不得删除或模糊Google徽标或版权声明。地图填充使您可以在必要时重新定位这些元素。如果您在地图底部显示自定义UI,请在地图底部添加填充,以便徽标和法律声明始终可见。