Ich verwende die Google Maps Android API v2 und brauche eine Möglichkeit, die Position der Schaltfläche "Mein Standort" zu bestimmen.
Ich erhalte die Schaltfläche "Mein Standort" wie folgt:
GooglePlayServicesUtil.isGooglePlayServicesAvailable(getApplicationContext());
final GoogleMap map = ((SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map)).getMap();
// This gets the button
map.setMyLocationEnabled(true);
Antworten:
Verwenden Sie einfach GoogleMap.setPadding (links, oben, rechts, unten), mit dem Sie Teile der Karte angeben können, die möglicherweise von anderen Ansichten verdeckt werden. Durch das Einstellen der Auffüllung werden die Standardkartensteuerelemente neu positioniert, und bei Kameraaktualisierungen wird der aufgefüllte Bereich verwendet.
https://developers.google.com/maps/documentation/android/map#map_padding
quelle
setPadding
es viele andere Nebenwirkungen gibt, die unerwünscht sein können. Am wichtigsten ist, dass die Bildschirmposition des Kameraziels geändert wird.Sie können die Schaltfläche "Mein Standort" abrufen und wie folgt verschieben:
quelle
mapView.findViewById(1).getParent()).findViewById(2);
.RelativeLayout.ALIGN_PARENT_TOP
undRelativeLayout.ALIGN_PARENT_BOTTOM
gleich unten rechts?Dies ist möglicherweise nicht die beste Lösung, aber Sie können Ihre eigene Schaltfläche über der Karte platzieren und selbst damit umgehen. Es würde Folgendes dauern: -
1) Legen Sie die Karte in ein FrameLayout und fügen Sie Ihre Schaltfläche oben hinzu. Z.B
2) Bearbeiten Sie die Einstellungen der Karten-Benutzeroberfläche so, dass die Schaltfläche nicht angezeigt wird, wenn Sie setMyLocationEnabled (true) aufrufen. Sie können dies über map.getUiSettings () tun. setMyLocationButtonEnabled (false);
3) Behandeln Sie den Klick Ihrer neuen Schaltfläche, um zu emulieren, was die mitgelieferte Schaltfläche bewirkt. Rufen Sie beispielsweise mMap.setMyLocationEnabled (...) auf; und schwenken Sie die Karte zum aktuellen Standort.
Hoffe das hilft, oder hoffe jemand kommt lange mit einer einfacheren Lösung für dich ;-)
quelle
Es wurde bereits oben erklärt. Nur eine kleine Ergänzung zu fabLouis 'Antwort. Sie können Ihre Kartenansicht auch über das SupportMapFragment abrufen.
quelle
Ich habe keine Lust, diese magischen Ansichts-IDs zu sehen, die andere verwenden. Ich schlage vor, Tags zu verwenden, um
MapView
s Kinder zu finden .Hier ist meine Lösung zum Platzieren der Schaltfläche " Mein Standort" über den Zoom- Steuerelementen.
quelle
GoogleMapCompass
.Ich habe dieses Problem in meinem Kartenfragment gelöst, indem ich meine Standortschaltfläche mithilfe des folgenden Codes in der rechten unteren Ecke der Ansicht neu positioniert habe. Hier ist meine Maps Activity.java: -
Fügen Sie diese Codezeilen in die onCreate () -Methode ein.
und hier ist onMapReady () Code: -
Ich hoffe, das wird Ihr Problem lösen. Vielen Dank.
quelle
Erhalten Sie zunächst die Google Map View:
Suchen Sie dann die Schaltfläche "MyLocation" (IDs aus dem Android Studio-Debugger):
Zum Schluss legen Sie einfach neue RelativeLayout-Parameter für die MyLocation-Schaltfläche fest (richten Sie in diesem Fall das übergeordnete Recht + die Mitte vertikal aus):
Boom! Jetzt kannst du es bewegen wie du willst;)
quelle
Siehe die Methode unten. Es befindet sich in einer Klasse, die SupportMapFragment erweitert. Es zeigt die Containeransicht für die Schaltfläche an und zeigt sie unten horizontal zentriert an.
quelle
Wenn Sie nur die Standortanzeige aktivieren möchten (der blaue Punkt), aber nicht die Standardschaltfläche Mein Standort benötigen:
Auf diese Weise können Sie auch Ihren eigenen Knopf zeichnen, wo Sie möchten, ohne solche seltsamen Dinge
mapView.findViewById(1).getParent())
.quelle
Ich hatte das gleiche Problem. Am Ende habe ich den Hierarchie-Viewer verwendet, um die Ansicht zu identifizieren, in der die Schaltfläche angezeigt und bearbeitet wurde. Sehr hackig, ich weiß, konnte aber keinen anderen Weg finden.
quelle
Es war ein bisschen schwierig, dies zum Laufen zu bringen. Aber ich habe es geschafft und dabei auch angefangen, die Zoomtasten zu bewegen. Hier mein vollständiger Code:
quelle
Ein Weg, um mit diesem Problem umzugehen. Löschen Sie die Standardschaltfläche und erstellen Sie Ihre eigene. Fügen Sie in der OnCreate-Anweisung Folgendes hinzu:
quelle
Versuchen Sie diesen Code
quelle
Zuvor konnten Sie die alte Regel der Schaltfläche entfernen:
quelle
Sie können folgenden Ansatz verwenden:
quelle
Ich habe meinem Fragment android eine Zeile hinzugefügt : layout_marginTop = "? Attr / actionBarSize" Es hat mir geholfen
quelle
Verwenden Sie diese für die Position unten rechts
quelle