google - android map使用




自动显示Google Maps标记的工具栏 (5)

我有一个标记,当我打开地图时会显示标记。 当我单击它时,它会显示标题和一个工具栏,该工具栏在地图的右下角包含两个按钮,这些按钮可让我启动意图以导航至标记或在Google地图中显示它。 我希望在打开地图时自动显示这些内容,而不是让用户单击标记。

像这样 :-) ... 我似乎无法解决该怎么做。

我努力了:

// create marker
MarkerOptions marker = new MarkerOptions().position(
        new LatLng(latitude, longitude)).title("title");

// adding marker
googleMap.addMarker(marker).showInfoWindow();
googleMap.getUiSettings().setMapToolbarEnabled(true);

但这只是在右上角显示标记标题和一个按钮,而不是右下角的两个工具栏意图按钮。

像这样 :-( ... 我有什么想法吗?


单击标记时出现的叠加层会在现场隐式创建和销毁。 您还不能手动显示(尚未)。

如果必须具有此功能,则可以使用2 ImageViews 在地图上创建一个叠加层,并在单击它们时调用适当的意图:

// Directions
Intent intent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse(
        "http://maps.google.com/maps?saddr=51.5, 0.125&daddr=51.5, 0.15"));
startActivity(intent);
// Default google map
Intent intent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse(
        "http://maps.google.com/maps?q=loc:51.5, 0.125"));
startActivity(intent);

注意:您需要根据Marker的 getPosition() 和用户的位置来更改坐标。

现在要隐藏默认的叠加层,只需在 OnMarkerClickListener 返回true OnMarkerClickListener 。 尽管您将失去在标记上显示 InfoWindows 和中央摄像头的功能,但是您可以简单地模仿它:

mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
    @Override
    public boolean onMarkerClick(Marker marker) {
        marker.showInfoWindow();
        mMap.animateCamera(CameraUpdateFactory.newLatLng(marker.getPosition()));
        return true;
    }
});

如果我没记错的话,您想在地图的右侧botton上显示与标记相关的两个按钮,如果我是真的,那么这些按钮对标记有一定的依赖性,因此您只需要执行一个像下面的代码,只需在创建时调用此方法,并确保在您的标记单击侦听器中

@Override
public void markerIntentButtonShow(Marker marker) {
      //setvisible(true) to your side buttons or call some Intent
      Intent i = new Intent(getActivity(), MarkerViewDetails.class);
      i.putExtra("marker_snippet", marker.getSnippet());
      startActivity(i);
}

并在点击监听器中调用该方法

        googleMap
                .setOnInfoWindowClickListener(new OnInfoWindowClickListener() {

                    @Override
                    public void onInfoWindowClick(Marker marker) {

                            markerIntentButtonShow(marker);
                    }
                });

并在您的onCreateView中

MarkerOptions marker = new MarkerOptions().position(
        new LatLng(latitude, longitude)).title("title");
googleMap.addMarker(marker).showInfoWindow();
markerIntentButtonShow(marker);

引用文档:

在精简模式地图中,工具栏将独立于用户的操作而持久保存。 在完全交互的地图中,当用户点击标记时工具栏会滑入,而当标记不再聚焦时工具栏会再次滑出。

似乎没有办法将工具栏保留在您的情况下,因为它是交互式地图。 如果需要,您可能想尝试使用lite-mode: https://developers.google.com/maps/documentation/android/lite : https://developers.google.com/maps/documentation/android/lite

同时查看您的代码:

// create marker
MarkerOptions marker = new MarkerOptions().position(
        new LatLng(latitude, longitude)).title("title");

// adding marker
googleMap.addMarker(marker).showInfoWindow();
googleMap.getUiSettings().setMapToolbarEnabled(true);

最后一行: googleMap.getUiSettings().setMapToolbarEnabled(true); 除非您事先将其显式设置为false,否则它是多余的。 该文档指出:

设置是否应启用或禁用“地图工具栏”的首选项。 如果启用,则用户将看到带有各种上下文相关操作的栏,包括“在Google Maps应用程序中打开此地图”和“在Google Maps应用程序中找到突出显示的标记的方向”。

默认情况下,“地图工具栏”处于启用状态。

链接: https://developer.android.com/reference/com/google/android/gms/maps/UiSettings.html#setMapToolbarEnabled(boolean) : https://developer.android.com/reference/com/google/android/gms/maps/UiSettings.html#setMapToolbarEnabled(boolean)

希望这可以帮助。



显示一个DialogFragment而不是信息窗口,并处理其中的所有内容。

@Override
public boolean onMarkerClick(Marker marker) {
    FragmentManager fm = getSupportFragmentManager();
    DialogFragment markerWebView = DialogFragment();
    mMap.animateCamera(CameraUpdateFactory.newLatLng(marker.getPosition()));
    markerWebView.show(fm, "fragment_marker");
    return true;
}

要么

使用标记点击功能,通过使用 Google地图按钮 传真功能 来打开/关闭叠加层

mMap.setOnMarkerClickListener(this);
mMap.setOnInfoWindowClickListener(this);


@Override
public boolean onMarkerClick(Marker marker) {
    //here turn on the overlays for nav turns etc. for this marker.
    return false
}

@Override
public void onInfoWindowClick(Marker marker) {
    //here turn off the overlays for nav turns etc.
    marker.hideInfoWindow();
}




google-maps-android-api-2