如何长按标记时如何显示上下文菜单?

时间:2013-06-15 17:03:34

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

我想在Android Google地图V2中长按鼠标时显示上下文菜单,但是:

  • 标记不处理长按事件。
  • openContextMenu(View view)方法需要一个视图,我不知道要传递什么。 我试着像这样调用这个方法:

    openContextMenu(findViewById(R.id.map));
    

但上下文菜单无法打开。

请帮帮我:P

4 个答案:

答案 0 :(得分:1)

关于长按,我怀疑你运气不好。

关于openContextMenu(),您需要在致电registerForContextMenu()之前致电View上的openContextMenu()

请注意,上下文菜单已经过时了几年,支持上下文操作栏(a.k.a.,action mode)。

答案 1 :(得分:1)

从3.1.36开始,这里的问题无法实现长时间点击监听。

一种hackish方式是使用附加的OnTouchListener对地图片段进行透明视图,在此处保存触摸事件时间并返回false。

如果稍后您拨打GoogleMap.OnMarkerClickListener.onMarkerClick,则可以确定这是长时间还是正常点击。

要获得正确的方法,我们需要在API中设置OnMarkerLongClickListener,您可以在gmaps-api-issues上提交功能请求。

如果你有其中一个,你可以只显示一个带有选项的对话框,但正如CommonsWare所说,这不是最漂亮的方式。我建议通过更改图标和显示动作来选择标记,但这是您的选择。

答案 2 :(得分:1)

看看这个页面:

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

您必须引用标记的InfoWindow来执行您需要的操作,因为有一个OnInfoWindowClickListener()您将处理信息的click事件,这是与标记点击不同的事件。 解决缺少OnMarkerLongClickListener()的聪明方法。

我希望你能帮忙

答案 3 :(得分:0)

您可以随时设置将标记定义为添加标记的内容,例如:

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