制作一个android地图菜单来改变地图类型

时间:2011-08-15 12:24:40

标签: android google-maps

我的Android应用中有一张地图。默认情况下,它会显示卫星视图,但我已将其关闭以仅显示道路地图视图。但是,我想知道如何构建一个菜单,所以当用户按下菜单按钮时,它会在底部显示一个带有“切换卫星地图”的部分。 (我将来会在菜单中添加其他项目)

向任何可以提供帮助的人致谢

3 个答案:

答案 0 :(得分:21)

这是我的实现,适用于GoogleMaps API v2。它显示一个带有四个单选按钮的对话框,您可以从中选择一种地图类型。当前选择的地图类型也已被选中。

Android AlertDialog to select GoogleMaps MapType

此代码最好进入您保存地图的活动。在调用showMapTypeSelectorDialog()之前,只需确保启动并正确显示地图。我还建议使用资源字符串作为标签。

private GoogleMap mMap;

...

private static final CharSequence[] MAP_TYPE_ITEMS =
        {"Road Map", "Hybrid", "Satellite", "Terrain"};

private void showMapTypeSelectorDialog() {
    // Prepare the dialog by setting up a Builder.
    final String fDialogTitle = "Select Map Type";
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle(fDialogTitle);

    // Find the current map type to pre-check the item representing the current state.
    int checkItem = mMap.getMapType() - 1;

    // Add an OnClickListener to the dialog, so that the selection will be handled.
    builder.setSingleChoiceItems(
            MAP_TYPE_ITEMS,
            checkItem,
            new DialogInterface.OnClickListener() {

                public void onClick(DialogInterface dialog, int item) {
                    // Locally create a finalised object.

                    // Perform an action depending on which item was selected.
                    switch (item) {
                        case 1:
                            mMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
                            break;
                        case 2:
                            mMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN);
                            break;
                        case 3:
                            mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
                            break;
                        default:
                            mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
                    }
                    dialog.dismiss();
                }
            }
    );

    // Build the dialog and show it.
    AlertDialog fMapTypeDialog = builder.create();
    fMapTypeDialog.setCanceledOnTouchOutside(true);
    fMapTypeDialog.show();
}

答案 1 :(得分:0)

只需将此添加到您的活动:

  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.menu_items, menu);
        return true;
  }

  @Override
  public boolean onOptionsItemSelected(MenuItem item) {
     switch (item.getItemId()) {
       case R.id.item1 :
        //do what you like
       default :
         return super.onOptionsItemSelected(item);
     }
  }

这应该在一个单独的xml文件中(可能是/res/menu/menu_items.xml)

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/item1"
          android:icon="@android:drawable/ic_menu_help"
          android:title="Help" />
    <item android:id="@+id/item2"
          android:icon="@android:drawable/ic_menu_manage"
          android:title="Settings" />
</menu>

答案 2 :(得分:0)

构建您的菜单/按钮/标签/您的选择,并在事件监听器中执行:mapView.setSatellite (false);这会将卫星转换为路线图。欢呼声。