MapView
的每个底角都有两个按钮,部分遮挡了左下角的Google徽标。
为了遵守API的条款和条件,我需要将Google徽标重新定位到更加明显的位置。即在按钮上方。
谷歌API文档指出谷歌徽标是用onDraw()
MapView
方法绘制的,但我不知道如何正确覆盖它,因为谷歌地图是封闭源。
我可以通过在UIView
孩子中找到正确的MKMapView's
来在iPhone中执行此操作,但我无法弄清楚如何在Android中执行此操作。
答案 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徽标仍然可以在新窗口中显示在正常位置。
这适用于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,请在地图底部添加填充,以便徽标和法律声明始终可见。