12

我正在使用 Google map-V2 API 在 android 中编写应用程序。我想覆盖操作栏,就像在谷歌地图应用程序中一样。我启用了“我的位置”按钮。现在的问题是我的位置按钮位于操作栏下方。有没有办法重新定位这个按钮。我想制作一个类似于地图的应用程序。我是android新手,所以请帮忙。

4

6 回答 6

14

您可以为地图设置填充

这解决了问题 - 覆盖在顶部的地图上(我使用了 48 个倾角,但您可以覆盖操作栏,然后获取它的实际高度(?android:attr/actionBarSize))

mapFragment.getMap().setPadding(0, dpToPx(48), 0, 0);

(DP到PX功能来自this SO answer

于 2013-11-29T09:46:42.047 回答
9

您可以轻松地重新定位您的位置按钮

View plusMinusButton = suppormanagerObj.getView().findViewById(1);
View locationButton = suppormanagerObj.getView().findViewById(2);

// and next place it, for exemple, on bottom right (as Google Maps app)
RelativeLayout.LayoutParams rlp = (RelativeLayout.LayoutParams)     locationButton.getLayoutParams();
// position on right bottom
rlp.addRule(RelativeLayout.ALIGN_PARENT_TOP, 0);
rlp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE);

更改位置按钮 您还可以在设置位置按钮的对齐方式后设置填充

mMap.setPadding(0, 0, 30, 105); 
于 2015-12-06T08:08:19.550 回答
8

您不能以任何方式更改 MyLocationButton,但可以启用和禁用它。已经有这方面的要求

随意禁用该按钮并实现您自己的按钮。

你会有这样的事情:

mMap.getUiSettings().setMyLocationButtonEnabled(false);
于 2013-07-26T14:54:19.210 回答
3

我通过使用下面的代码将我的位置按钮重新定位到视图的右下角解决了我的地图片段中的这个问题,这是我的 Maps Activity.java :-

在 onCreate() 方法中添加这行代码,

   SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapView = mapFragment.getView();
        mapFragment.getMapAsync(this);

这是 onMapReady() 代码:-

  @Override
        public void onMapReady(GoogleMap googleMap) {
            mMap = googleMap;
            mMap.setMyLocationEnabled(true);

            // Add a marker in Sydney and move the camera
            LatLng sydney = new LatLng(-34, 151);
            mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
            mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));

            if (mapView != null &&
                    mapView.findViewById(Integer.parseInt("1")) != null) {
                // Get the button view
                View locationButton = ((View) mapView.findViewById(Integer.parseInt("1")).getParent()).findViewById(Integer.parseInt("2"));
                // and next place it, on bottom right (as Google Maps app)
                RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams)
                        locationButton.getLayoutParams();
                // position on right bottom
                layoutParams.addRule(RelativeLayout.ALIGN_PARENT_TOP, 0);
                layoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE);
                layoutParams.setMargins(0, 0, 30, 30);
            }

        }

我希望,这将解决您的问题。谢谢。

于 2016-08-27T07:25:21.060 回答
3

我没有使用 findViewById 解决方案,而是使用 findViewWithTag 来获取对按钮的引用。对我来说,使用字符串似乎更具可读性和可靠性。

    View myLocationButton = mMap.findViewWithTag("GoogleMapMyLocationButton");
    RelativeLayout.LayoutParams rlp = (RelativeLayout.LayoutParams) myLocationButton.getLayoutParams();
    rlp.addRule(RelativeLayout.ALIGN_PARENT_TOP, 0);
    rlp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE);
于 2017-03-06T05:38:52.143 回答
2

只需使用 GoogleMap.setPadding(left, top, right, bottom),它允许您指示地图中可能被其他视图遮挡的部分。设置填充重新定位标准地图控件,相机更新将使用填充区域。

https://developers.google.com/maps/documentation/android/map#map_padding

于 2014-08-07T14:00:07.037 回答