MapView
の各下隅に2つのボタンがあり、左下隅のgoogleロゴが部分的に隠されています。
APIの利用規約に準拠するために、Googleロゴをより見やすい場所に移動する必要があります。つまり、ボタンの上。
Google APIドキュメントには、googleロゴはMapView
のonDraw()
メソッドで描画されると記載されていますが、googleマップはクローズドソースであるため、正しくオーバーライドする方法がわかりません。
MKMapView's
の子で正しいUIView
を見つけることで、iPhoneでこれを行うことができますが、Androidでこれを行う方法がわかりません。
Google Maps SDK v2 for Androidはこの機能を追加します。
GoogleMap.setPadding()
を使用して、コンテナ全体を埋めながら、「アクティブ」領域(Googleロゴと著作権表示を含む)にパディングを追加します。
https://developers.google.com/maps/documentation/Android/map#map_padding
GoogleWatermark
に割り当てられたタグを使用して、Googleロゴを移動できます。以下のコードでは、画面の右上隅に移動しました。
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
が追加されたフレームレイアウトです。
同じ問題が発生しましたが、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ロゴは引き続き表示され、通常の場所の新しいウィンドウ内にあります。
これはAndroid 2.2で機能します。また、標準のズームコントロールも上に移動するため、自分のボタンに干渉しないという利点があります。
ドキュメントから:
protected final void onDraw(Android.graphics.Canvas canvas)
onDrawは最後のメソッドです。 これはまったくオーバーライドできません。
または、親の下部に合わせたレイアウトで、マップビューの下にボタンを表示することもできます。このようにあなたはあなたが好きな位置にボタンを持つことができ、それはあなたのグーグルロゴを覆い隠すことはありません。
本当に古い質問ですが、誰かがそれを利用するかもしれません。右上隅に表示するようにしました。
Rect rect = new Rect()
mMapView.getLocalVisibleRect(rect)
googleMap.setPadding(rect.width() - 100, 0, 0, rect.height() - 50)
別の場所に配置したい場合は、setPaddingを楽しむ必要があります
また、グーグルマップのUIボタンを非表示にすることを忘れないでください:
googleMap.getUiSettings().setMapToolbarEnabled(false)
googleMap.getUiSettings().setZoomControlsEnabled(false)
googleMap.getUiSettings().setMyLocationButtonEnabled(false)
(少なくとも)1つの問題があります。カメラを使用して特定のポイントの地図を中央に配置すると、正しく機能しません。カメラの動きが必要な場合は、パディングを表示されているマップフラグメントに設定する方が適切であり、正しく機能するはずです。 rectを使用して、setPadding
に入力する次元を確認します
一種のハックですが、MapView
をFrameLayout,
に追加して、MapView
Xdpの高さをFrameLayout
よりも大きく設定してみてください。切り取って、ロゴDrawable
を好きな場所に追加します。
Googleマップのドキュメントに記載されているように、GoogleMapオブジェクトにパディングを使用する以外に何もする必要はありません。注:Google Maps Platformの利用規約に従い、アプリケーションでGoogleロゴや著作権表示を削除したり隠したりしてはなりません。マップのパディングにより、必要に応じてこれらの要素を再配置できます。マップの下部にカスタムUIを表示する場合は、マップの下部にパディングを追加して、ロゴと法的通知が常に表示されるようにします。
私は次のことを行うことでこれを達成しました。
<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に違反することになります。