web-dev-qa-db-fra.com

Affichage automatique de la barre d'outils pour le marqueur Google Maps

J'ai un marqueur et lorsque j'ouvre la carte, il montre le marqueur. Lorsque je clique dessus, il affiche le titre et une barre d'outils qui comprend deux boutons en bas à droite de la carte qui me permettent de lancer des intentions pour naviguer jusqu'au marqueur ou de l'afficher dans google maps. Je voudrais les afficher automatiquement lorsque la carte est ouverte plutôt que de demander à l'utilisateur de cliquer sur le marqueur.

Comme ça :-) ... enter image description here Je n'arrive pas à trouver comment faire ça.

J'ai essayé:

// create marker
MarkerOptions marker = new MarkerOptions().position(
        new LatLng(latitude, longitude)).title("title");

// adding marker
googleMap.addMarker(marker).showInfoWindow();
googleMap.getUiSettings().setMapToolbarEnabled(true);

Mais cela montre juste le titre du marqueur et un bouton en haut à droite pour aller à mon emplacement et non les deux boutons d'intention de la barre d'outils en bas à droite.

Comme ça :-( ... enter image description here Je suis un peu coincé avec des idées?

27
samleighton87

La superposition qui apparaît quand un marqueur est cliqué, est créée et détruite sur place implicitement. Vous ne pouvez pas (encore) le montrer manuellement.

Si vous devez disposer de cette fonctionnalité, vous pouvez créer une superposition sur votre carte avec 2 ImageViews et appeler les intentions appropriées lorsque vous cliquez dessus:

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

Remarque: vous devez modifier les coordonnées en fonction de la fonction getPosition() du marqueur et de l'emplacement de l'utilisateur.

Maintenant, pour masquer la superposition par défaut, tout ce que vous avez à faire est de retourner true dans le OnMarkerClickListener. Bien que vous perdiez la possibilité d'afficher InfoWindows et de centrer la caméra sur le marqueur, vous pouvez l'imiter assez simplement:

mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
    @Override
    public boolean onMarkerClick(Marker marker) {
        marker.showInfoWindow();
        mMap.animateCamera(CameraUpdateFactory.newLatLng(marker.getPosition()));
        return true;
    }
});
14
Simas

J'ai ajouté une demande de fonctionnalité ici: http://code.google.com/p/gmaps-api-issues/issues/detail?id=7652

8
rockgecko

Citant le doc:

Dans une carte en mode léger, la barre d'outils persiste indépendamment des actions de l'utilisateur. Dans une carte entièrement interactive, la barre d'outils glisse lorsque l'utilisateur appuie sur un marqueur et glisse à nouveau lorsque le marqueur n'est plus au point.

Il semble qu'il n'y ait aucun moyen de conserver la barre d'outils dans votre cas, car c'est une carte interactive. Vous voudrez peut-être essayer d'utiliser le mode léger si c'est une exigence: https://developers.google.com/maps/documentation/Android/lite

En regardant également votre code:

// create marker
MarkerOptions marker = new MarkerOptions().position(
        new LatLng(latitude, longitude)).title("title");

// adding marker
googleMap.addMarker(marker).showInfoWindow();
googleMap.getUiSettings().setMapToolbarEnabled(true);

La toute dernière ligne: googleMap.getUiSettings().setMapToolbarEnabled(true); est redondante sauf si vous la définissez explicitement sur false au préalable. Le doc déclare:

Définit la préférence d'activation ou de désactivation de la barre d'outils Carte. Si cette option est activée, les utilisateurs verront une barre avec diverses actions dépendantes du contexte, notamment "ouvrir cette carte dans l'application Google Maps" et "trouver l'itinéraire vers le marqueur en surbrillance dans l'application Google Maps".

Par défaut, la barre d'outils Carte est activée.

Le lien: https://developer.Android.com/reference/com/google/Android/gms/maps/UiSettings.html#setMapToolbarEnabled (boolean)

J'espère que cela t'aides.

6
user2511882

si je ne me trompe pas, vous voulez afficher les deux boutons liés au marqueur sur le côté droit de la carte et ces boutons ont une certaine dépendance au marqueur si je suis vrai, vous avez donc juste besoin d'implémenter une nouvelle méthode comme code ci-dessous et appelez simplement cette méthode sur créer et sûr dans votre écouteur de clic de marqueur

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

et appelez la méthode dans votre écouteur de clics

        googleMap
                .setOnInfoWindowClickListener(new OnInfoWindowClickListener() {

                    @Override
                    public void onInfoWindowClick(Marker marker) {

                            markerIntentButtonShow(marker);
                    }
                });

et dans votre onCreateView

MarkerOptions marker = new MarkerOptions().position(
        new LatLng(latitude, longitude)).title("title");
googleMap.addMarker(marker).showInfoWindow();
markerIntentButtonShow(marker);
2
phpniki

J'ai eu un problème similaire ..... si vous êtes d'accord pour ne pas laisser l'utilisateur naviguer sur la carte et se concentrer uniquement sur votre marqueur, vous pouvez utiliser mode lite carte .... Citation de Documentation

Dans une carte lite-mode , la barre d'outils persiste indépendamment des actions de l'utilisateur. Dans une carte entièrement interactive, la barre d'outils glisse lorsque l'utilisateur appuie sur un marqueur et glisse à nouveau lorsque le marqueur n'est plus au point.

Encore une fois de docs

Par défaut également, lorsqu'un utilisateur touche la carte, l'API démarre l'application mobile Google Maps. Vous pouvez remplacer cela en utilisant GoogleMap.setOnMapClickListener () pour définir votre propre écouteur. Vous pouvez également désactiver cliquer sur les événements sur la carte, en appelant setClickable () sur la vue qui contient MapView ou MapFragment.

2
sanket vetkoli

Pour la barre d'outils que vous avez décrite en rouge, vous pouvez la désactiver à l'aide de la méthode setMapToolbarEnabled () dans UISettings

De la documentation:

Définit la préférence d'activation ou de désactivation de la barre d'outils Carte. Si cette option est activée, les utilisateurs verront une barre avec diverses actions dépendantes du contexte, notamment "ouvrir cette carte dans l'application Google Maps" et "trouver l'itinéraire vers le marqueur en surbrillance dans l'application Google Maps".

Exemple de code pour désactiver les deux boutons:

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

Juste au cas où vous vous poseriez également des questions sur les boutons de zoom, vous pouvez les désactiver comme ceci:

mMap.getUiSettings().setZoomControlsEnabled(false);
2
Naveen Kumar M

Affichez un DialogFragment au lieu de la fenêtre d'informations et gérez tout ce qu'il contient.

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

OR

utilisez les clics du marqueur pour activer/désactiver une superposition à l'aide d'un fac-similé d'un bouton Google map

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();
}
1
danny117