マップにズーム コントロールを追加したいと考えています。また、デフォルトの中央下の位置ではなく、ズーム コントロールの位置をレイアウトしたいと考えています。getZoomControl でこれを行うことができますが、非推奨です。
でこれを行う方法を教えてもらえますsetBuildtInZoomControls
か?
マップにズーム コントロールを追加したいと考えています。また、デフォルトの中央下の位置ではなく、ズーム コントロールの位置をレイアウトしたいと考えています。getZoomControl でこれを行うことができますが、非推奨です。
でこれを行う方法を教えてもらえますsetBuildtInZoomControls
か?
これが、最終的に機能するようになった方法です(ZoomControlを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();
}
});
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));
mapView.getZoomButtonsController()
これは文書化されていませんが(少なくともここで利用可能なjavadoc:com.google.android.maps)、これは非推奨の代替品であると確信しています。getZoomControls
編集:それが文書化されていることがわかりました。GoogleAPIドキュメントではなく、ここにあります:developer.android.comのZoomButtonsController
getContainer ()
次に、または(実行する内容に応じて)を呼び出しgetZoomControls ()
て、ズームコントロールビューにアクセスできます。
そして、次のようなことをします
RelativeLayout.LayoutParams zoomParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
zoomParams.addRule(RelativeLayout.ALIGN_PARENT_TOP);
mapView.getZoomButtonsController().getZoomControls().setLayoutParams(zoomParams);
マップビューがどのレイアウトを使用しているかはわかりませんが、LinearLayoutの場合もあります。
これを行う唯一の方法は、MapViewの非推奨のgetZoomControls()を使用するか、DIY することだと確信しています。MapControllerには必要なメソッドがあります (例: zoomIn()およびzoomOut() )。
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);
私はこれがうまくいくと思います...これが役に立つことを願っています:)
ジョージがMapView にズーム コントロールを配置する際に提供したソリューションでは、重力属性を使用して組み込みのズーム コントロールをレイアウトできます。この属性は、画面の下部に配置されているように見えるコンテナーに要素を配置するため、ズーム コントロールをレイアウトして画面の上部にズーム コントロールを配置することはできません。
結論として、次のようにして、組み込みのズーム コントロールをレイアウトできます。
((FrameLayout.LayoutParams) mapView.getZoomButtonsController().getZoomControls().getLayoutParams()).gravity = Gravity.RIGHT;
ズーム コントロールは に含まれているため、またはFrameLayout
のようなルールを使用しようとすると、痛みと悲しみだけが生じることに注意してください。RelativeLayout.ALIGN_PARENT_BOTTOM
RelativeLayout.ALIGN_PARENT_TOP