2009-11-20 37 views
6

muốn thêm điều khiển thu phóng vào bản đồ. Tôi cũng muốn bố trí vị trí của điều khiển thu phóng thay vì vị trí ở giữa ở giữa mặc định. Tôi có thể làm điều này bằng cách getZoomControl nhưng nó không được chấp nhận.Cách bố trí điều khiển thu phóng bằng setBuiltInZoomControls (đúng)?

Có ai cho tôi biết cách thực hiện điều này với setBuildtInZoomControls không?

Trả lời

0

Tôi khá chắc chắn rằng cách duy nhất để làm điều này là sử dụng số getZoomControls() không dùng nữa hoặc để tự làm. MapController có các phương pháp cần thiết (ví dụ: zoomIn()zoomOut()).

1
mapView.getZoomButtonsController() 

Mặc dù đây được cung cấp tài liệu (ít nhất là trong javadoc sẵn ở đây: com.google.android.maps) Tôi khá chắc chắn điều này là sự thay thế cho phản getZoomControls

Chỉnh sửa: chỉ phát hiện ra rằng nó tài liệu, chỉ không có trong tài liệu google api mà đúng hơn là ở đây: ZoomButtonsController on developer.android.com

Sau đó, bạn có thể gọi getContainer() hoặc getZoomControls() (tùy thuộc vào những gì bạn muốn làm) để truy cập vào chế độ xem điều khiển thu phóng.

Và sau đó làm một cái gì đó giống như

RelativeLayout.LayoutParams zoomParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
zoomParams.addRule(RelativeLayout.ALIGN_PARENT_TOP); 
mapView.getZoomButtonsController().getZoomControls().setLayoutParams(zoomParams); 

mặc dù tôi phải thừa nhận rằng tôi không chắc chắn những gì bố trí các bản đồ xem sử dụng, có thể là LinearLayout là tốt.

+0

'RelativeLayout.LayoutParams' ném ngoại lệ truyền lớp học. FrameLayout.LayoutParams là những gì được yêu cầu, mặc dù tôi đang stumped về cách để có được điều này để làm việc –

9

Đây là cách cuối cùng tôi đã làm việc của mình (bằng cách nhúng một ZoomControl trong bố cục XML).

mapView = (MapView) this.findViewById(R.id.mapView); 

ZoomControls zoomControls = (ZoomControls) findViewById(R.id.zoomcontrols); 
zoomControls.setOnZoomInClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      mapView.getController().zoomIn(); 
     } 
}); 
zoomControls.setOnZoomOutClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      mapView.getController().zoomOut(); 
     } 
}); 

Xem: Always show zoom controls on a MapView

0
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); 

Tôi nghĩ rằng điều này sẽ làm việc ... Hy vọng này là hữu ích :)

+0

Điều này cũng sử dụng các chức năng getZoomControls không được chấp nhận của mapview. – Janusz

1
LinearLayout zoomLayout = (LinearLayout) findViewById(R.id.layout_zoom); 
View mapController = mapView.getZoomButtonsController().getZoomControls(); 
zoomLayout.addView(mapController, new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
0

Các giải pháp được cung cấp bởi George trên Placing Zoom Controls in a MapView cho phép bố trí được xây dựng trong các điều khiển thu phóng bằng cách sử dụng các thuộc tính trọng lực. Thuộc tính này định vị phần tử vào vùng chứa của nó, có vẻ như được đặt ở dưới cùng của màn hình để không thể định vị các điều khiển thu phóng trên đầu màn hình bằng cách bố trí các điều khiển thu phóng.

Tóm lại bạn có thể bố trí được xây dựng trong điều khiển zoom bằng cách thực hiện:

((FrameLayout.LayoutParams) mapView.getZoomButtonsController().getZoomControls().getLayoutParams()).gravity = Gravity.RIGHT; 

Hãy nhớ rằng các điều khiển zoom được chứa vào một FrameLayout do đó bất kỳ cố gắng sử dụng quy tắc như RelativeLayout.ALIGN_PARENT_BOTTOM hoặc RelativeLayout.ALIGN_PARENT_TOP sẽ chỉ dẫn bạn đến đau và nỗi buồn.

Các vấn đề liên quan