2014-01-30 3 views
18

Wie ändern Sie programmatisch die Breite und Höhe einer com.google.android.gms.maps.SupportMapFragment? Ich könnte mir vorstellen, dass Sie es vielleicht in eine Viewgroup mit match_parent einbinden können, aber ich hoffe, dass ich nicht verschachteln kann, wenn ich es nicht muss (ehrlich gesagt, ich bin mir nicht einmal sicher, dass es funktioniert).Wie programmierst du die Breite und Höhe von Google Maps v2 (Fragmentunterstützung)?

Um den Zusammenhang zu geben, möchte ich die Karte von einer Höhe auf eine andere auf Karte klicken.

mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() { 
    @Override 
    public void onMapClick(LatLng latLng) { 
     expandMap(); // not sure how to do this programatically. 
    } 
}); 

Jede Hilfe wäre großartig!

Antwort

34

ich es mit Hilfe von Programmatically set google map fragment visibility (API2) weitgehend herausgefunden.

mMapFragment = (SupportMapFragment) (getSupportFragmentManager() 
      .findFragmentById(R.id.storefront_map)); 
ViewGroup.LayoutParams params = mMapFragment.getView().getLayoutParams(); 
params.height = 900; 
mMapFragment.getView().setLayoutParams(params); 
4

dies ist ein Beispiel unter Verwendung von Methode:

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    setContentView(R.layout.main); 
    findViewById(R.id.storefront_map).getLayoutParams().width = 400; 
} 
+0

ich meine Frage aktualisiert besser Kontext zu geben, was ich tun möchte. – loeschg

2

Sie sollten nicht Höhe einer Karte fixieren ... setzen Sie ihn nach Bildschirmhöhe & Breite.

DisplayMetrics displaymetrics = new DisplayMetrics(); 
     getActivity().getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); 
     int height = displaymetrics.heightPixels; 

     ViewGroup.LayoutParams params = mMapFragment.getView().getLayoutParams(); 
     params.height = height/2; 
     mMapFragment.getView().setLayoutParams(params); 
1

Schnellste (mit weniger Code-Zeilen) Art und Weise i gefunden:

ViewGroup.MarginLayoutParams parms = (ViewGroup.MarginLayoutParams) rlLocation.getLayoutParams(); 
    parms.bottomMargin = 100; 
    parms.topMargin = 100; 
+0

Normalerweise möchten Sie die Größe der Karte ändern, um ein anderes Element aufzunehmen. Wenn das Element eine feste Größe hat, wie es in meinem Fall war, ist es vorzuziehen, einen Rand auf die Größe des eingefügten Elements zu setzen. Guter Tipp, danke. – Stack