始终在Android中显示地图标记标题

41
我正在以下方式向GoogleMap添加默认标记(Marker):

GoogleMap map = ((MapFragment) getFragmentManager().findFragmentById(R.id.editMapMap)).getMap();

MarkerOptions markerOptions = new MarkerOptions();
markerOptions.position(currentLocation.getCoordinate());
markerOptions.title(Utils.getLocationString(currentLocation.getCoordinate()));
markerOptions.snippet("Blah");

locationMarker = map.addMarker(markerOptions);
locationMarker.setDraggable(true);

我该如何让标记始终显示标题和简介而无需触摸?我还想在触摸时禁用它们的隐藏。
6个回答

105

这很容易:

locationMarker.showInfoWindow();

6
使用showInfoWindow(),并按如下方式添加标记。
Marker marker = mMap.addMarker(new MarkerOptions().position(currentPosition).title("Your text"));
marker.showInfoWindow();

3
好像多个标记不能同时显示信息,除非点击它们? - avs333
谢谢,这不在微软的文档中。 - Andrés Mauricio Gómez

5

展示和隐藏标记的方法有两种。布尔返回值可以阻止默认行为发生(false),也可以允许其发生(true)。换句话说,它告诉系统您是否消费了事件。请参见 Google API 参考

private GoogleMap.OnMarkerClickListener onMarkerClickedListener = new GoogleMap.OnMarkerClickListener() {
    @Override
    public boolean onMarkerClick(Marker marker) {
        if (marker.isInfoWindowShown()) {
            marker.hideInfoWindow();
        } else {
            marker.showInfoWindow();
        }
        return true;
    }
};

mGoogleMap.setOnMarkerClickListener(onMarkerClickedListener);

5

当使用onMarkerClickListener时,请返回false,如果返回true,会显示infoWindow

要在单击标记时隐藏标题:

map.setOnMarkerClickListener(this);
...

@Override
public boolean onMarkerClick(Marker arg0) {     
  Log.i(TAG,"marker arg0 = "+arg0);               
  return false;
}

如果我们返回true,标题将会显示;否则,如果我们返回false,标题将不会显示。

谷歌地图V2可以实现这个吗?我返回了false,但标记仍然显示标题... - Ricky
是的,它适用于V2。我只尝试了V2。另一个选择是将标题设置为空字符串,即“”。但这不是很好。 - sandeepmaaram

3

我知道这个问题很久了,但我会在这里发布我的答案,以防对某人有所帮助。

信息窗口对我的情况不起作用,我希望标题只在有空间的情况下显示,如果没有足够的空间来显示,则可能隐藏,以避免它们彼此重叠。

我在互联网上找不到解决方案,所以我卷起袖子制作了这个库,它解决了我的问题,希望它也能帮助其他人:

https://github.com/androidseb/android-google-maps-floating-marker-titles

以下是它的工作预览:

preview


1

以下是我的回答:

根据文档,有一段文字说明信息窗口一次只能显示一个,因此没有办法做到同时显示多个:

“信息窗口允许您在用户点击标记时向用户显示信息。 一次只显示一个信息窗口。如果用户单击标记,则关闭当前信息窗口并显示新的信息窗口。请注意,如果用户单击当前正在显示信息窗口的标记,则该信息窗口将关闭并重新打开。”

Maps api文档说:

“最佳实践:为了获得最佳用户体验,地图上只应打开一个信息窗口。多个信息窗口会使地图显得杂乱无序。如果您一次只需要一个信息窗口,可以创建一个InfoWindow对象,并在不同的位置或标记上打开它,例如在用户单击时。如果确实需要多个信息窗口,则可以同时显示多个InfoWindow对象。”

https://developers.google.com/maps/documentation/javascript/infowindows


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接