将缩放控件放置在MapView中

jas*_*ins 18 android android-mapview

我正在尝试让缩放控件显示在a中mapview,以下代码几乎可以正常工作,但缩放控件显示在左上角,而mapview不是像我指定的那样通过底部中心setGravity().有人可以告诉我我错过了什么吗?

zoomView = (LinearLayout) mapView.getZoomControls();
zoomView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT)); 
zoomView.setGravity(Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL);
mapView.addView(zoomView);
Run Code Online (Sandbox Code Playgroud)

这些视图/布局都是以编程方式构建的,没有要调整的布局文件.

jcr*_*son 23

将以下行添加到类的OnCreate()方法MapView:

view.setBuiltInZoomControls(true);


Ret*_*ier 19

这里的技巧是将另一个Layout容器放在要放置ZoomControls的位置,然后将ZoomControls插入其中.

真正的诀窍是使用RelativeLayout而不是LinearLayout定位元素,如下例所示layout.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
  <com.google.android.maps.MapView
    android:id="@+id/myMapView"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    android:enabled="true"
    android:clickable="true"
    android:apiKey="MY_MAP_API_KEY"
  />
  <LinearLayout android:id="@+id/layout_zoom" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_centerHorizontal="true" 
  /> 
</RelativeLayout> 
Run Code Online (Sandbox Code Playgroud)

所述layout_zoom的LinearLayout元件被定位在屏幕的底部中心,将其放置在的中间/底部MapView.

然后在您的Activity中onCreate,获取对layout_zoom元素的引用并将ZoomControl插入其中,就像您已经完成的那样:

LinearLayout zoomLayout =(LinearLayout)findViewById(R.id.layout_zoom);  
View zoomView = myMapView.getZoomControls(); 
zoomLayout.addView(zoomView, new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
myMapView.displayZoomControls(true);
Run Code Online (Sandbox Code Playgroud)

ZoomControls现在应该长按一下,不会窃取地图触摸事件.


Geo*_*rge 7

以上对我不起作用,但这样做(将控件放在右下角):

mapView.setBuiltInZoomControls(true);
ZoomButtonsController zbc = mapView.getZoomButtonsController();
ViewGroup container = zbc.getContainer();
for (int i = 0; i < container.getChildCount(); i++) {
    View child = container.getChildAt(i);
    if (child instanceof ZoomControls) {
        FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) child.getLayoutParams();
        lp.gravity = Gravity.RIGHT | Gravity.BOTTOM;
        child.requestLayout();
        break;
    } 
}
Run Code Online (Sandbox Code Playgroud)


小智 0

回顾 - 使用 FILL_PARENT 的问题是缩放控件会“窃取”所有触摸事件;这样当缩放控件可见时您就无法平移地图。你知道如何防止这种情况吗?