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)
这些视图/布局都是以编程方式构建的,没有要调整的布局文件.
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现在应该长按一下,不会窃取地图触摸事件.
以上对我不起作用,但这样做(将控件放在右下角):
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)
| 归档时间: |
|
| 查看次数: |
44410 次 |
| 最近记录: |