我正在尝试让缩放控件显示在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);
这些视图/布局都是以编程方式构建的,没有要调整的布局文件.
将以下行添加到类的OnCreate()
方法MapView
:
view.setBuiltInZoomControls(true);
这里的技巧是将另一个Layout容器放在要放置ZoomControls的位置,然后将ZoomControls插入其中.
真正的诀窍是使用RelativeLayout
而不是LinearLayout
定位元素,如下例所示layout.xml
:
所述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);
ZoomControls现在应该长按一下,不会窃取地图触摸事件.
以上对我不起作用,但这样做(将控件放在右下角):
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; } }