web-dev-qa-db-ja.com

MapViewでGoogleロゴを再配置します

MapViewの各下隅に2つのボタンがあり、左下隅のgoogleロゴが部分的に隠されています。

APIの利用規約に準拠するために、Googleロゴをより見やすい場所に移動する必要があります。つまり、ボタンの上。

Google APIドキュメントには、googleロゴはMapViewonDraw()メソッドで描画されると記載されていますが、googleマップはクローズドソースであるため、正しくオーバーライドする方法がわかりません。

MKMapView'sの子で正しいUIViewを見つけることで、iPhoneでこれを行うことができますが、Androidでこれを行う方法がわかりません。

28
dzeikei

Google Maps SDK v2 for Androidはこの機能を追加します。

GoogleMap.setPadding()を使用して、コンテナ全体を埋めながら、「アクティブ」領域(Googleロゴと著作権表示を含む)にパディングを追加します。

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

32
dzeikei

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が追加されたフレームレイアウトです。

12
Jknair

同じ問題が発生しましたが、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で機能します。また、標準のズームコントロールも上に移動するため、自分のボタンに干渉しないという利点があります。

8
John J Smith

ドキュメントから:

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

onDrawは最後のメソッドです。 これはまったくオーバーライドできません。

または、親の下部に合わせたレイアウトで、マップビューの下にボタンを表示することもできます。このようにあなたはあなたが好きな位置にボタンを持つことができ、それはあなたのグーグルロゴを覆い隠すことはありません。

4
Sourab Sharma

本当に古い質問ですが、誰かがそれを利用するかもしれません。右上隅に表示するようにしました。

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に入力する次元を確認します

1
Janusz Hain

一種のハックですが、MapViewFrameLayout,に追加して、MapView Xdpの高さをFrameLayoutよりも大きく設定してみてください。切り取って、ロゴDrawableを好きな場所に追加します。

0
Grantland Chew

Googleマップのドキュメントに記載されているように、GoogleMapオブジェクトにパディングを使用する以外に何もする必要はありません。注:Google Maps Platformの利用規約に従い、アプリケーションでGoogleロゴや著作権表示を削除したり隠したりしてはなりません。マップのパディングにより、必要に応じてこれらの要素を再配置できます。マップの下部にカスタムUIを表示する場合は、マップの下部にパディングを追加して、ロゴと法的通知が常に表示されるようにします。

0
Robotec

私は次のことを行うことでこれを達成しました。

<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に違反することになります。

0