Skip to content

Commit 4e62be9

Browse files
committed
uses getRealMetrics on display to get real height metrics
1 parent cdb86a6 commit 4e62be9

File tree

1 file changed

+21
-0
lines changed

1 file changed

+21
-0
lines changed

ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,13 @@
1515
import java.util.List;
1616
import java.util.Map;
1717

18+
import android.content.Context;
19+
import android.os.Build;
1820
import android.util.DisplayMetrics;
21+
import android.view.Display;
22+
import android.view.WindowManager;
1923

24+
import com.facebook.common.logging.FLog;
2025
import com.facebook.csslayout.CSSLayoutContext;
2126
import com.facebook.infer.annotation.Assertions;
2227
import com.facebook.react.animation.Animation;
@@ -30,6 +35,7 @@
3035
import com.facebook.react.bridge.ReadableArray;
3136
import com.facebook.react.bridge.ReadableMap;
3237
import com.facebook.react.bridge.WritableArray;
38+
import com.facebook.react.common.ReactConstants;
3339
import com.facebook.react.uimanager.debug.NotThreadSafeViewHierarchyUpdateDebugListener;
3440
import com.facebook.react.uimanager.events.EventDispatcher;
3541
import com.facebook.systrace.Systrace;
@@ -85,6 +91,21 @@ public UIManagerModule(
8591
super(reactContext);
8692
mEventDispatcher = new EventDispatcher(reactContext);
8793
DisplayMetrics displayMetrics = reactContext.getResources().getDisplayMetrics();
94+
95+
// Get the real display metrics if we are using API level 17 or higher.
96+
// The real metrics include system decor elements (e.g. soft menu bar).
97+
//
98+
// See: http://developer.android.com/reference/android/view/Display.html#getRealMetrics(android.util.DisplayMetrics)
99+
try {
100+
if (Build.VERSION.SDK_INT >= 17) {
101+
WindowManager wm = (WindowManager)reactContext.getSystemService(Context.WINDOW_SERVICE);
102+
Display display = wm.getDefaultDisplay();
103+
display.getRealMetrics(displayMetrics);
104+
}
105+
} catch (Exception e) {
106+
FLog.e(ReactConstants.TAG, "Error getting real display metrics: " + e.getMessage());
107+
}
108+
88109
DisplayMetricsHolder.setDisplayMetrics(displayMetrics);
89110
mModuleConstants = createConstants(displayMetrics, viewManagerList);
90111
mUIImplementation = uiImplementation;

0 commit comments

Comments
 (0)