【问题标题】:Display toolbar for Google Maps marker automatically自动显示谷歌地图标记的工具栏
【发布时间】:2015-02-25 17:57:14
【问题描述】:

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

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

我试过了:

// 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


【解决方案1】:

引用文档:

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

似乎没有办法在您的情况下保留工具栏,因为它是一个交互式地图。如果需要,您可能想尝试使用 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)

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    单击标记时出现的叠加层会在现场隐式创建和销毁。您不能手动显示(目前)。

    如果您必须拥有此功能,您可以使用 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;
        }
    });
    

    【讨论】:

    • 谷歌是否添加了另一种方式来显示它们而无需单击标记?或者这仍然是唯一的选择吗
    【解决方案3】:

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

    使用标记点击打开/关闭覆盖使用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();
    }
    

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

        • 已经 5 年了,除了被分配给 5 个不同的 Google 员工外,什么都没发生。
        • 优先级太低的问题,他们可能永远不会实现它;)
        【解决方案6】:

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

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

        再次来自docs

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

        【讨论】:

          【解决方案7】:

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

          来自文档:

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

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

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

          如果您还想知道缩放按钮,您可以像这样禁用它们:

          mMap.getUiSettings().setZoomControlsEnabled(false);
          

          【讨论】:

            猜你喜欢
            • 2012-09-05
            • 2014-10-08
            • 2014-05-17
            • 1970-01-01
            • 2013-04-20
            相关资源
            最近更新 更多