如何自定义 GoogleMap V2 中内置缩放控件的位置?
Google Maps library 的第 1 版有很多与此主题相关的问题。
如何使用 setBuiltInZoomControls(true) 布局缩放控件?
但是,我找不到与图书馆 V2 相关的任何问题。
在 V2 中,没有方法
(LinearLayout) mapView.getZoomControls();
前面提到的所有问题都已过时。
提前致谢
如何自定义 GoogleMap V2 中内置缩放控件的位置?
Google Maps library 的第 1 版有很多与此主题相关的问题。
如何使用 setBuiltInZoomControls(true) 布局缩放控件?
但是,我找不到与图书馆 V2 相关的任何问题。
在 V2 中,没有方法
(LinearLayout) mapView.getZoomControls();
前面提到的所有问题都已过时。
提前致谢
根据您尝试执行的操作,您可能会发现GoogleMap.setPadding()很有用(于 2013 年 9 月添加)。
map.setPadding(leftPadding, topPadding, rightPadding, bottomPadding);
从 API 文档:
此方法允许您在地图上定义可见区域,通过在地图的四个边缘中的每一个上设置填充来向地图发出信号,表明边缘周围的地图部分可能会被遮挡。地图功能将适应填充。例如,缩放控件、指南针、版权声明和 Google 徽标将被移动以适应定义的区域,相机移动将相对于可见区域的中心等。
另请参阅有关填充如何在 GoogleMap 中工作的描述。
是的,您可以通过小技巧更改ZoomControl和MyLocation按钮的位置。在我的示例中,我有SupportMapFragment,它是从 xml 布局膨胀的。
ZoomControl 和 MyLocation 按钮的视图 ID:
ZoomControl id = 0x1
MyLocation button id = 0x2
更新 ZoomControl 位置的代码:
// Find map fragment
SupportMapFragment mapFragment = (SupportMapFragment) getFragmentManager().findFragmentById(R.id.map);
// Find ZoomControl view
View zoomControls = mapFragment.getView().findViewById(0x1);
if (zoomControls != null && zoomControls.getLayoutParams() instanceof RelativeLayout.LayoutParams) {
// ZoomControl is inside of RelativeLayout
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) zoomControls.getLayoutParams();
// Align it to - parent top|left
params.addRule(RelativeLayout.ALIGN_PARENT_TOP);
params.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
// Update margins, set to 10dp
final int margin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 10,
getResources().getDisplayMetrics());
params.setMargins(margin, margin, margin, margin);
}
我使用 MapFragment 而不是 SupportMapFragment:
import android.util.TypedValue;
在 onCreate
// Find map fragment
MapFragment mapFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.mapview);
int ZoomControl_id = 0x1;
int MyLocation_button_id = 0x2;
// Find ZoomControl view
View zoomControls = mapFragment.getView().findViewById(ZoomControl_id);
if (zoomControls != null && zoomControls.getLayoutParams() instanceof RelativeLayout.LayoutParams) {
// ZoomControl is inside of RelativeLayout
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) zoomControls.getLayoutParams();
// Align it to - parent top|left
params.addRule(RelativeLayout.ALIGN_PARENT_TOP);
params.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
// Update margins, set to 10dp
final int margin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 10,
getResources().getDisplayMetrics());
params.setMargins(margin, margin, margin, margin);
}
仅作记录:
导航控件是0x4
所以总的来说:
@LayoutRes final int ZOOM_CONTROL_ID = 0x1;
@LayoutRes final int MY_LOCATION_CONTROL_ID = 0x2;
@LayoutRes final int NAVIGATION_CONTROL_ID = 0x4;