当我在 Android Google Maps V2 中长按标记时,我想显示一个上下文菜单,但是:
- 标记不处理长点击事件。
openContextMenu(View view) 方法需要一个视图,我不知道要传递什么。我试图这样调用该方法:
openContextMenu(findViewById(R.id.map));
但上下文菜单未打开。
请帮助我:P
当我在 Android Google Maps V2 中长按标记时,我想显示一个上下文菜单,但是:
openContextMenu(View view) 方法需要一个视图,我不知道要传递什么。我试图这样调用该方法:
openContextMenu(findViewById(R.id.map));
但上下文菜单未打开。
请帮助我:P
看看这个页面:
https://developers.google.com/maps/documentation/android/infowindows
您必须参考标记的 InfoWindow 来执行您需要的操作,因为有一个 OnInfoWindowClickListener() 您将处理信息的单击事件,这是与标记单击不同的事件。解决缺少 OnMarkerLongClickListener() 的巧妙方法。
我希望你能帮忙
关于长按,我怀疑你运气不好。
关于openContextMenu()
,你需要在调用registerForContextMenu()
之前View
调用openContextMenu()
。
请注意,上下文菜单已经过时了几年,取而代之的是上下文操作栏(也称为操作模式)。
从 3.1.36 开始,这里的问题是没有办法让长点击监听器。
一种骇人听闻的方法是在附加了 OnTouchListener 的地图片段上具有透明视图,您可以在其中保存着陆事件时间并返回 false。
如果稍后您接到GoogleMap.OnMarkerClickListener.onMarkerClick
电话,您可以决定这是长按还是正常点击。
对于我们需要OnMarkerLongClickListener
在 API 中使用的正确方法,您可以在gmaps-api-issues上提交功能请求。
当您拥有其中一个时,您可以只显示一个带有选项的对话框,但正如 CommonsWare 建议的那样,这不是最漂亮的方式。我建议通过更改图标和显示操作来选择标记,但这是您的选择。
您总是可以在添加标记时将其定义为某物,例如:
@Override
public void onMapLongClick(LatLng point) {
map.clear();
myMarker = map.addMarker(new MarkerOptions().position(point));
Log.d("Devon", "Lat: " + point.latitude + " Lng: " + point.longitude);
}
然后在调用 onMarkerClick 方法时,如果点击的标记等于定义的标记,则执行代码:
@Override
public boolean onMarkerClick(Marker marker) {
if (marker.equals(myMarker)) {
Toast.makeText(this, "Add 'Directions to here' and 'Directions From here' buttons.", Toast.LENGTH_LONG).show();
}
return true;
}