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

时间:2014-12-29 14:27:31

标签: android google-maps google-maps-markers google-maps-android-api-2

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

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

我试过了:

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

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

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

喜欢这样:-( ... enter image description here 我有点陷入困境吗?

7 个答案:

答案 0 :(得分: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);

注意:您需要根据标记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;
    }
});

答案 1 :(得分:8)

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

答案 2 :(得分:6)

引用文档:

  

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

看起来好像没有办法在工具栏中保留工具栏,因为它是一个交互式地图。如果需要,您可能想尝试使用lite-mode: 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地图中打开此地图   应用'并找到Google地图中突出显示标记的路线   应用'

     

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

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

希望这有帮助。

答案 3 :(得分:2)

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

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

答案 4 :(得分:2)

我遇到了类似的问题.....如果您没有让用户在地图中浏览并只关注您的标记,那么您可以使用lite-mode地图.... 从文档中引用

  

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

再次来自docs

  

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

答案 5 :(得分:2)

对于您以红色勾勒的工具栏,您可以使用setMapToolbarEnabled() method in UISettings

将其禁用

来自文档:

  

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

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

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

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

mMap.getUiSettings().setZoomControlsEnabled(false);

答案 6 :(得分:1)

显示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;
}

OR

使用标记点击来使用facsimile of a Google map button

打开/关闭叠加层
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();
}