自动显示Google地图标记的工具栏

问题描述 投票:26回答:7

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

像这样:-) ...我似乎无法弄清楚如何做到这一点。

我试过了:

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

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

但这只是显示标记标题和右上角的按钮转到我的位置而不是右下角的两个工具栏意图按钮。

像这样:-( ......我有点卡住任何想法?

android google-maps google-maps-markers google-maps-android-api-2
7个回答
14
投票

单击标记时出现的叠加层会在现场隐式创建和销毁。你无法手动显示(还)。

如果您必须具有此功能,则可以使用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。虽然你将无法在标记上显示InfoWindows和中心摄像头,但你可以模仿它:

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

8
投票

我在这里添加了一个功能请求:http://code.google.com/p/gmaps-api-issues/issues/detail?id=7652


6
投票

引用文档:

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

似乎没有办法在工具栏中保留工具栏,因为它是一个交互式地图。如果需要,您可能想尝试使用lite模式:qazxsw poi

还看着你的代码:

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); 是冗余的,除非您事先明确地将其设置为false。该文件指出:

设置是否应启用或禁用地图工具栏的首选项。如果启用,用户将看到一个包含各种与上下文相关的操作的栏,包括“在Google地图应用中打开此地图”和“查找Google地图应用中突出显示的标记的路线”。

默认情况下,启用地图工具栏。

链接:googleMap.getUiSettings().setMapToolbarEnabled(true);

希望这可以帮助。


2
投票

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

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

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

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

并在您的onCreateView中

        googleMap
                .setOnInfoWindowClickListener(new OnInfoWindowClickListener() {

                    @Override
                    public void onInfoWindowClick(Marker marker) {

                            markerIntentButtonShow(marker);
                    }
                });

2
投票

我有一个类似的问题.....如果你没有让用户在地图中浏览并只关注你的标记,你可以使用MarkerOptions marker = new MarkerOptions().position( new LatLng(latitude, longitude)).title("title"); googleMap.addMarker(marker).showInfoWindow(); markerIntentButtonShow(marker); 地图....来自文档的引用

lite-mode地图中,工具栏会独立于用户的操作而保留。在完全交互式地图中,当用户点击标记时工具栏会滑入,当标记不再处于焦点时,工具栏会再次滑出。

再次来自lite-mode

此外,默认情况下,当用户点按地图时,API会启动Google地图移动应用。您可以使用GoogleMap.setOnMapClickListener()设置自己的侦听器来覆盖此设置。您还可以通过在包含MapView或MapFragment的视图上调用setClickable()来在地图上单击docs事件。


2
投票

对于您以红色勾勒的工具栏,您可以使用disable禁用它

从文档:

设置是否应启用或禁用地图工具栏的首选项。如果启用,用户将看到一个包含各种与上下文相关的操作的栏,包括“在Google地图应用中打开此地图”和“查找Google地图应用中突出显示的标记的路线”。

禁用两个按钮的代码示例:

setMapToolbarEnabled() method in UISettings

万一你也想知道缩放按钮,你可以像这样禁用它们:

//Disable Map Toolbar:
mMap.getUiSettings().setMapToolbarEnabled(false);

1
投票

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

mMap.getUiSettings().setZoomControlsEnabled(false);

要么

使用标记点击使用@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; } 打开/关闭叠加层

facsimile of a Google map button
© www.soinside.com 2019 - 2024. All rights reserved.