2013-07-26 22 views
10

Ich schreibe eine Anwendung in Android mit Google Map-V2-API. Ich möchte die Aktionsleiste genau wie in der Google Map-Anwendung überlegen. Und ich habe die Schaltfläche "Mein Standort" aktiviert. Das Problem ist jetzt, dass meine Standorttaste unter der Aktionsleiste ist. Gibt es eine Möglichkeit, diese Schaltfläche neu zu positionieren? Ich möchte eine App ähnlich wie Google Maps erstellen. Ich bin neu bei Android, also bitte helfen.Wie positioniere ich meine Standorttaste in google mapv2 in android?

Antwort

6

Sie können den MyLocationButton in keiner Weise ändern, aber aktivieren und deaktivieren. Dafür gibt es bereits eine request.

Fühlen Sie sich frei, disable die Schaltfläche und implementieren Sie Ihre eigene.

Sie wäre so etwas wie dieses:

mMap.getUiSettings().setMyLocationButtonEnabled(false); 
+0

bitte hilfe, Wie kann ich eine Schaltfläche oben auf einer Karte hinzufügen. und wie ich meinen Standort von der neu hinzugefügten Schaltfläche abrufen kann. –

+0

Es wäre besser, eine neue Frage dazu zu eröffnen. –

+0

Wenn ich den MyLocationButton deaktiviere, wie kann ich den Standort auf ähnliche Weise anzeigen? –

12

Sie padding auf der Karte festlegen.

Dies das Problem gelöst - Overlays über die Karte, auf der Oberseite (verwendete ich 48 Einbrüche, aber Sie können Aktionsleiste überlagern und dann tatsächliche Höhe davon (android erhalten: attr/actionBarSize)?)

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

(DP zu PX-Funktion ist von this SO answer)

+0

Setzen Sie das Padding programmatisch für mich gearbeitet, während es im Layout xml nicht gesetzt – Radu

2

verwenden Sie einfach GoogleMap.setPadding (links, oben, rechts, unten), die Sie Teile der Karte, um anzuzeigen, erlaubt, die von anderen Ansichten verdeckt werden kann. Durch Einstellen der Auffüllung werden die Standardsteuerelemente für Karten neu positioniert, und bei Kameraaktualisierungen wird die aufgefüllte Region verwendet.

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

+0

Nizza Trick. Wie bekomme ich das aktuelle Padding? GoogleMap.getPadding-Methode() existiert nicht ... – Wooff

7

Sie können Ihren Standort Taste leicht

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 Sie zusätzlich Polsterung neu positionieren kann die Ausrichtung des Standortes Taste

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

Wie in der unteren | links? –

+0

Sie müssen aMap.setPadding verwenden. Diese Methode ist verantwortlich für die Position des Location-Bild-ICONS. – Ramkailash

3

Ich löste dieses Problem nach der Einstellung in meiner Map-Fragment durch Positionierung meiner loc ation Taste auf der rechten unteren Ecke der Ansicht unten, hier unter Verwendung von Code ist meine Karten Activity.java: -

Fügen Sie diese Zeilen Code in onCreate() -Methode,

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

und hier ist onMapReady () Code: -

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

     } 

Ich hoffe, dies wird Ihr Problem lösen. Vielen Dank.

0

Anstelle der findViewById-Lösungen habe ich findViewWithTag verwendet, um einen Verweis auf die Schaltfläche zu erhalten. Eine Saite zu benutzen erschien mir lesbarer und zuverlässiger.

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