85 votes

Modifier la position du bouton "Ma position" de l'API Google Maps

J'utilise l'API Android de Google Maps v2, et j'ai besoin d'un moyen pour changer la position du bouton "Ma position".

J'obtiens le bouton "Ma position" comme suit :

GooglePlayServicesUtil.isGooglePlayServicesAvailable(getApplicationContext());
final GoogleMap map = ((SupportMapFragment) getSupportFragmentManager()
        .findFragmentById(R.id.map)).getMap();

// This gets the button
map.setMyLocationEnabled(true);

89voto

fabLouis Points 201

Vous pouvez obtenir le bouton "Ma position" et le déplacer, comme :

public class MapFragment extends SupportMapFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View mapView = super.onCreateView(inflater, container, savedInstanceState);   

    // Get the button view 
    View locationButton = ((View) mapView.findViewById(1).getParent()).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);
    rlp.setMargins(0, 0, 30, 30);
    }
}

70voto

user3918667 Points 11

Il suffit d'utiliser GoogleMap.setPadding(left, top, right, bottom), qui permet d'indiquer les parties de la carte qui peuvent être masquées par d'autres vues. Le réglage de l'espacement repositionne les commandes standard de la carte, et les mises à jour de la caméra utiliseront la zone d'espacement.

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

15voto

Ryan Points 1188

Ce n'est peut-être pas la meilleure solution, mais vous pouvez placer votre propre bouton sur la carte et le gérer vous-même. Il prendrait les éléments suivants:-

1) Placez la carte dans un frameLayout et ajoutez votre bouton au-dessus. Par exemple

<FrameLayout
    android:id="@+id/mapFrame"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <fragment
        xmlns:map="http://schemas.android.com/apk/res-auto"
        android:id="@+id/mapFragment"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        class="com.google.android.gms.maps.MapFragment"
        map:mapType="normal"
        map:uiCompass="true" />

    <ImageButton
        android:id="@+id/myMapLocationButton"
        android:layout_width="36dp"
        android:layout_height="36dp"
        android:layout_gravity="bottom|right"
        android:background="@drawable/myMapLocationDrawable"
        android:contentDescription="My Location" />

</FrameLayout>

2) Modifiez les paramètres de l'interface utilisateur des cartes pour que le bouton n'apparaisse pas lorsque vous appelez setMyLocationEnabled(true). Vous pouvez le faire via map.getUiSettings(). setMyLocationButtonEnabled(false) ;

3) Traitez le clic de votre nouveau bouton de manière à imiter ce que fait le bouton fourni. Par exemple, appelez mMap.setMyLocationEnabled(...) ; et faites pivoter la carte jusqu'à l'emplacement actuel.

J'espère que cela vous aidera, ou que quelqu'un trouvera une solution plus simple pour vous ;-)

14voto

Sahil Jain Points 399

Il s'agit d'un petit complément à la réponse de fabLouis. Vous pouvez également obtenir votre vue de carte à partir du SupportMapFragment.

        /**
         * Move the button
         */
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().
                findFragmentById(R.id.map);
        View mapView = mapFragment.getView();
        if (mapView != null &&
                mapView.findViewById(1) != null) {
            // Get the button view
            View locationButton = ((View) mapView.findViewById(1).getParent()).findViewById(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);
        }

14voto

Cord Rehn Points 499

Je n'aime pas voir ces identifiants de vue magiques que d'autres utilisent, je suggère d'utiliser des balises pour les trouver. MapView Les enfants de l'Union européenne.

Voici ma solution pour placer le Ma localisation au-dessus du bouton Zoom des contrôles.

// Get map views
View location_button =_mapView.findViewWithTag("GoogleMapMyLocationButton");
View zoom_in_button = _mapView.findViewWithTag("GoogleMapZoomInButton");
View zoom_layout = (View) zoom_in_button.getParent();

// adjust location button layout params above the zoom layout
RelativeLayout.LayoutParams location_layout = (RelativeLayout.LayoutParams) location_button.getLayoutParams();
location_layout.addRule(RelativeLayout.ALIGN_PARENT_TOP, 0);
location_layout.addRule(RelativeLayout.ABOVE, zoom_layout.getId());

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X