diff --git a/android/src/main/java/com/mapbox/mapboxgl/Convert.java b/android/src/main/java/com/mapbox/mapboxgl/Convert.java index ca22c4b54..1b657b3b9 100644 --- a/android/src/main/java/com/mapbox/mapboxgl/Convert.java +++ b/android/src/main/java/com/mapbox/mapboxgl/Convert.java @@ -4,7 +4,10 @@ package com.mapbox.mapboxgl; +import android.content.Context; import android.graphics.Point; +import android.util.DisplayMetrics; + import com.mapbox.geojson.Polygon; import com.mapbox.mapboxsdk.camera.CameraPosition; import com.mapbox.mapboxsdk.camera.CameraUpdate; @@ -235,7 +238,8 @@ private static String toString(Object o) { return (String) o; } - static void interpretMapboxMapOptions(Object o, MapboxMapOptionsSink sink) { + static void interpretMapboxMapOptions(Object o, MapboxMapOptionsSink sink, Context context) { + final DisplayMetrics metrics = context.getResources().getDisplayMetrics(); final Map data = toMap(o); final Object cameraTargetBounds = data.get("cameraTargetBounds"); if (cameraTargetBounds != null) { @@ -292,7 +296,8 @@ static void interpretMapboxMapOptions(Object o, MapboxMapOptionsSink sink) { final Object logoViewMargins = data.get("logoViewMargins"); if(logoViewMargins != null){ final List logoViewMarginsData = toList(logoViewMargins); - sink.setLogoViewMargins(toInt(logoViewMarginsData.get(0)), toInt(logoViewMarginsData.get(1))); + final Point point = toPoint(logoViewMarginsData, metrics.density); + sink.setLogoViewMargins(point.x, point.y); } final Object compassGravity = data.get("compassViewPosition"); if(compassGravity != null){ @@ -301,12 +306,15 @@ static void interpretMapboxMapOptions(Object o, MapboxMapOptionsSink sink) { final Object compassViewMargins = data.get("compassViewMargins"); if(compassViewMargins != null){ final List compassViewMarginsData = toList(compassViewMargins); - sink.setCompassViewMargins(toInt(compassViewMarginsData.get(0)), toInt(compassViewMarginsData.get(1))); + final Point point = toPoint(compassViewMarginsData, metrics.density); + sink.setCompassViewMargins(point.x, point.y); } final Object attributionButtonMargins = data.get("attributionButtonMargins"); if(attributionButtonMargins != null){ final List attributionButtonMarginsData = toList(attributionButtonMargins); - sink.setAttributionButtonMargins(toInt(attributionButtonMarginsData.get(0)), toInt(attributionButtonMarginsData.get(1))); + final Point point = toPoint(attributionButtonMarginsData, metrics.density); + final int attributionButtonWidth = toPixels(21, metrics.density); + sink.setAttributionButtonMargins(metrics.widthPixels - point.x - attributionButtonWidth, point.y); } } diff --git a/android/src/main/java/com/mapbox/mapboxgl/MapboxMapController.java b/android/src/main/java/com/mapbox/mapboxgl/MapboxMapController.java index d8bcce666..1967f0b85 100644 --- a/android/src/main/java/com/mapbox/mapboxgl/MapboxMapController.java +++ b/android/src/main/java/com/mapbox/mapboxgl/MapboxMapController.java @@ -417,7 +417,7 @@ public void onMethodCall(MethodCall call, MethodChannel.Result result) { mapReadyResult = result; break; case "map#update": { - Convert.interpretMapboxMapOptions(call.argument("options"), this); + Convert.interpretMapboxMapOptions(call.argument("options"), this, context); result.success(Convert.toJson(getCameraPosition())); break; } diff --git a/android/src/main/java/com/mapbox/mapboxgl/MapboxMapFactory.java b/android/src/main/java/com/mapbox/mapboxgl/MapboxMapFactory.java index 5a1b6c605..1b2c4c9c8 100644 --- a/android/src/main/java/com/mapbox/mapboxgl/MapboxMapFactory.java +++ b/android/src/main/java/com/mapbox/mapboxgl/MapboxMapFactory.java @@ -30,7 +30,7 @@ public PlatformView create(Context context, int id, Object args) { Map params = (Map) args; final MapboxMapBuilder builder = new MapboxMapBuilder(); - Convert.interpretMapboxMapOptions(params.get("options"), builder); + Convert.interpretMapboxMapOptions(params.get("options"), builder, context); if (params.containsKey("initialCameraPosition")) { CameraPosition position = Convert.toCameraPosition(params.get("initialCameraPosition")); builder.setInitialCameraPosition(position);