我正在尝试让缩放控件显示在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);
这些视图/布局都是以编程方式构建的,没有要调整的布局文件。
答案 0 :(得分:23)
将以下行添加到OnCreate()
类的MapView
方法:
view.setBuiltInZoomControls(true);
答案 1 :(得分: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>
layout_zoom LinearLayout元素位于屏幕的底部中央,位于MapView
的中间/底部。
然后在您的活动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现在应该长按一下,不会窃取地图触摸事件。
答案 2 :(得分: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;
}
}
答案 3 :(得分:4)
Reto:感谢您的回复,但我们的想法是在没有的情况下使用XML布局。
我最终解决了这个问题。由于MapView是ViewGroup的子类,因此您可以轻松添加子视图(如缩放控件)。您只需要一个MapView.LayoutParams实例,就可以了。我做了类似的事情(将缩放控件放在mapview的底部中心)。
// layout to insert zoomcontrols at the bottom center of a mapview
MapView.LayoutParams params = MapView.LayoutParams(
LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT,
mapViewWidth / 2, mapViewHeight,
MapView.LayoutParams.BOTTOM_CENTER);
// add zoom controls
mapView.addView(mapView.getZoomControls(), params);
答案 4 :(得分:2)
不幸的是,我无法在11月28日6:32对Jason Hudgins批准的解决方案添加评论,但我的代码出现了一个小错误:
在这一行:
MapView.LayoutParams params = MapView.LayoutParams(
Eclipse给我的错误是
“方法LayoutParams(int,int, int,int,int)未定义 键入MapView“
相反,创建一个新的MapView.LayoutParams对象修复它,如下所示:
MapView.LayoutParams params = **new** MapView.LayoutParams(
花了一些时间才发现,因为我是n00b:D
答案 5 :(得分:2)
来自google groups thread我发现了这个:
没有XML的ZoomControls:
public class MyMapActivity extends MapActivity { public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
RelativeLayout relativeLayout = new RelativeLayout(this);
setContentView(relativeLayout);
final MapView mapView = new MapView(this, DEBUG_MAP_API_KEY);
RelativeLayout.LayoutParams mapViewLayoutParams = new
RelativeLayout.LayoutParams
(RelativeLayout.LayoutParams.FILL_PARENT,RelativeLayout.LayoutParams.FILL_PARENT );
relativeLayout.addView(mapView, mapViewLayoutParams);
RelativeLayout.LayoutParams zoomControlsLayoutParams = new
RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT );
zoomControlsLayoutParams.addRule
(RelativeLayout.ALIGN_PARENT_BOTTOM);
zoomControlsLayoutParams.addRule
(RelativeLayout.CENTER_HORIZONTAL);
relativeLayout.addView(mapView.getZoomControls(),
zoomControlsLayoutParams);
mapView.setClickable(true);
mapView.setEnabled(true);
}
100%为我使用SDK1.1
答案 6 :(得分:2)
您可以尝试以下方法:
MapView map = (MapView)findViewById(R.id.mapview);
map.setBuiltInZoomControls(true);
答案 7 :(得分:0)
Reto - 使用FILL_PARENT的问题是缩放控件然后“窃取”所有触摸事件;这样在缩放控件可见时无法平移地图。你知道怎么防止这个吗?