19

ズーム コントロールを に表示しようとしています。次のコードはほとんど機能しますが、ズーム コントロールは で指定しているような下中央ではなく、mapviewの左上に表示されます。誰かが私が欠けているものについて教えてくれますか?mapviewsetGravity()

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

これらのビュー/レイアウトはすべてプログラムで構築され、微調整するレイアウト ファイルはありません。

4

8 に答える 8

23

クラスのOnCreate()メソッドに次の行を追加します。MapView

view.setBuiltInZoomControls(true);

于 2010-03-23T12:41:57.843 に答える
19

ここでのコツは、ZoomControls を配置したい場所に別の Layout コンテナを配置し、そこに ZoomControls を挿入することです。

本当の秘訣は、次のサンプルに示すように、要素を配置するのRelativeLayoutではなく、を使用することです。LinearLayoutlayout.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.

次に、Activity 内で、 layout_zoomonCreate要素への参照を取得し、 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 は、地図のタッチ イベントを盗むことなく、長いクリックで表示されるようになりました。

于 2008-11-11T07:27:39.023 に答える
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;
    } 
}
于 2011-05-12T22:51:38.790 に答える
4

Reto:返信ありがとうございますが、XMLレイアウトを使用せずにそれを行うというアイデアでした。

私は最終的に問題を解決しました。MapViewはViewGroupのサブクラスであるため、子ビューを簡単に追加できます(ズームコントロールなど)。必要なのはMapView.LayoutParamsインスタンスだけで、準備は完了です。私はこのようなことをしました(ズームコントロールをマップビューの下部中央に配置します)。

  // 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);
于 2008-11-28T06:32:53.580 に答える
2

残念ながら、11 月 28 日 6:32 からジェイソン ハジンズが承認したソリューションにコメントを追加することはできませんが、彼のコードで小さなエラーが発生しました。

この行で:

MapView.LayoutParams params = MapView.LayoutParams(

Eclipseが私に与えたエラーは

「メソッド LayoutParams(int, int, int, int, int) はタイプ MapView に対して定義されていません」

代わりに、新しい MapView.LayoutParams オブジェクトを作成すると、次のように修正されました。

MapView.LayoutParams params = **new** MapView.LayoutParams(

私はn00bなので、見つけるのに少し時間がかかりました:D

于 2009-01-22T22:44:53.670 に答える
2

Googleグループのスレッドから、私はこれを見つけました:

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

 } 

SDK1.1で100%機能していました

于 2009-02-27T11:45:14.717 に答える
0

Reto - FILL_PARENT を使用する際の問題は、ズーム コントロールがすべてのタッチ イベントを「盗む」ことです。ズーム コントロールが表示されている間はマップをパンできません。これを防ぐ方法を知っていますか?

于 2008-11-08T20:24:37.723 に答える