如何在Android中的谷歌地图v2中重新定位我的位置按钮?

时间:2013-07-26 14:44:34

标签: android google-maps

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

6 个答案:

答案 0 :(得分:14)

您可以将padding设置为地图。

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

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

(DP到PX功能来自this SO answer

答案 1 :(得分: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);

Chage LocationButton 您还可以在设置位置按钮的对齐后设置填充

mMap.setPadding(0, 0, 30, 105); 

答案 2 :(得分:7)

您无法以任何方式更改MyLocationButton,但可以启用和禁用它。已经有request了。

随意disable按钮,然后实现自己的按钮。

你会有这样的事情:

mMap.getUiSettings().setMyLocationButtonEnabled(false);

答案 3 :(得分: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);
            }

        }

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

答案 4 :(得分:2)

只需使用GoogleMap.setPadding(左,上,右,下),即可指示地图中可能被其他视图遮挡的部分。设置填充会重新定位标准地图控件,相机更新将使用填充区域。

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

答案 5 :(得分:0)

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

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