mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
BREAKING: Android: Correct value of Dimensions.get('screen').fontScale
Summary:
The PR description has been updated to reflect the new approach.
**Breaking Change Summary**
On Android, the following properties now return a different number:
- `Dimensions.get('window').fontScale`
- `Dimensions.get('screen').fontScale`
- `PixelRatio.getFontScale()`
This is a breaking change to anyone who was using these properties because the meaning of these properties has now changed.
These properties used to return a value representing font scale times density ([`DisplayMetrics.scaledDensity`](https://developer.android.com/reference/android/util/DisplayMetrics.html#scaledDensity)). Now they return a value representing just font scale ([`Configuration.fontScale`](https://developer.android.com/reference/android/content/res/Configuration.html#fontScale)).
**PR Description**
This PR changes a few things:
- Correctly exposes the font scale to JavaScript as `Dimensions.get('screen').fontScale`. UIManager was exporting `DisplayMetrics.scaledDensity` under the name `fontScale`. How
Closes https://github.com/facebook/react-native/pull/11008
Differential Revision: D4558207
Pulled By: astreet
fbshipit-source-id: 096ce7b28051325dfd45fdb2a14b5e9b7d3bc46f
This commit is contained in:
committed by
Facebook Github Bot
parent
7f9876c049
commit
186f308aec
+29
-28
@@ -16,6 +16,8 @@ import android.util.DisplayMetrics;
|
||||
import android.view.accessibility.AccessibilityEvent;
|
||||
import android.widget.ImageView;
|
||||
|
||||
import com.facebook.react.bridge.Arguments;
|
||||
import com.facebook.react.bridge.WritableMap;
|
||||
import com.facebook.react.common.MapBuilder;
|
||||
import com.facebook.react.uimanager.events.TouchEventType;
|
||||
|
||||
@@ -81,7 +83,7 @@ import com.facebook.react.uimanager.events.TouchEventType;
|
||||
.build();
|
||||
}
|
||||
|
||||
public static Map<String, Object> getConstants() {
|
||||
public static Map<String, Object> getConstants(float fontScale) {
|
||||
HashMap<String, Object> constants = new HashMap<String, Object>();
|
||||
constants.put(
|
||||
"UIView",
|
||||
@@ -95,35 +97,9 @@ import com.facebook.react.uimanager.events.TouchEventType;
|
||||
"ScaleAspectCenter",
|
||||
ImageView.ScaleType.CENTER_INSIDE.ordinal())));
|
||||
|
||||
DisplayMetrics displayMetrics = DisplayMetricsHolder.getWindowDisplayMetrics();
|
||||
DisplayMetrics screenDisplayMetrics = DisplayMetricsHolder.getScreenDisplayMetrics();
|
||||
constants.put(
|
||||
"Dimensions",
|
||||
MapBuilder.of(
|
||||
"windowPhysicalPixels",
|
||||
MapBuilder.of(
|
||||
"width",
|
||||
displayMetrics.widthPixels,
|
||||
"height",
|
||||
displayMetrics.heightPixels,
|
||||
"scale",
|
||||
displayMetrics.density,
|
||||
"fontScale",
|
||||
displayMetrics.scaledDensity,
|
||||
"densityDpi",
|
||||
displayMetrics.densityDpi),
|
||||
"screenPhysicalPixels",
|
||||
MapBuilder.of(
|
||||
"width",
|
||||
screenDisplayMetrics.widthPixels,
|
||||
"height",
|
||||
screenDisplayMetrics.heightPixels,
|
||||
"scale",
|
||||
screenDisplayMetrics.density,
|
||||
"fontScale",
|
||||
screenDisplayMetrics.scaledDensity,
|
||||
"densityDpi",
|
||||
screenDisplayMetrics.densityDpi)));
|
||||
getDimensionsConstants(fontScale));
|
||||
|
||||
constants.put(
|
||||
"StyleConstants",
|
||||
@@ -157,4 +133,29 @@ import com.facebook.react.uimanager.events.TouchEventType;
|
||||
|
||||
return constants;
|
||||
}
|
||||
|
||||
public static WritableMap getDimensionsConstants(float fontScale) {
|
||||
DisplayMetrics windowDisplayMetrics = DisplayMetricsHolder.getWindowDisplayMetrics();
|
||||
DisplayMetrics screenDisplayMetrics = DisplayMetricsHolder.getScreenDisplayMetrics();
|
||||
|
||||
WritableMap windowDisplayMetricsMap = Arguments.createMap();
|
||||
windowDisplayMetricsMap.putInt("width", windowDisplayMetrics.widthPixels);
|
||||
windowDisplayMetricsMap.putInt("height", windowDisplayMetrics.heightPixels);
|
||||
windowDisplayMetricsMap.putDouble("scale", windowDisplayMetrics.density);
|
||||
windowDisplayMetricsMap.putDouble("fontScale", fontScale);
|
||||
windowDisplayMetricsMap.putDouble("densityDpi", windowDisplayMetrics.densityDpi);
|
||||
|
||||
WritableMap screenDisplayMetricsMap = Arguments.createMap();
|
||||
screenDisplayMetricsMap.putInt("width", screenDisplayMetrics.widthPixels);
|
||||
screenDisplayMetricsMap.putInt("height", screenDisplayMetrics.heightPixels);
|
||||
screenDisplayMetricsMap.putDouble("scale", screenDisplayMetrics.density);
|
||||
screenDisplayMetricsMap.putDouble("fontScale", fontScale);
|
||||
screenDisplayMetricsMap.putDouble("densityDpi", screenDisplayMetrics.densityDpi);
|
||||
|
||||
WritableMap dimensionsMap = Arguments.createMap();
|
||||
dimensionsMap.putMap("windowPhysicalPixels", windowDisplayMetricsMap);
|
||||
dimensionsMap.putMap("screenPhysicalPixels", screenDisplayMetricsMap);
|
||||
|
||||
return dimensionsMap;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user