mirror of
https://github.com/zhigang1992/react-native.git
synced 2026-04-24 04:16:00 +08: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
@@ -11,12 +11,15 @@
|
||||
*/
|
||||
'use strict';
|
||||
|
||||
var EventEmitter = require('EventEmitter');
|
||||
var Platform = require('Platform');
|
||||
var UIManager = require('UIManager');
|
||||
var RCTDeviceEventEmitter = require('RCTDeviceEventEmitter');
|
||||
|
||||
var invariant = require('fbjs/lib/invariant');
|
||||
|
||||
var eventEmitter = new EventEmitter();
|
||||
var dimensionsInitialized = false;
|
||||
var dimensions = {};
|
||||
class Dimensions {
|
||||
/**
|
||||
@@ -60,6 +63,15 @@ class Dimensions {
|
||||
}
|
||||
|
||||
Object.assign(dimensions, dims);
|
||||
if (dimensionsInitialized) {
|
||||
// Don't fire 'change' the first time the dimensions are set.
|
||||
eventEmitter.emit('change', {
|
||||
window: dimensions.window,
|
||||
screen: dimensions.screen
|
||||
});
|
||||
} else {
|
||||
dimensionsInitialized = true;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -81,6 +93,39 @@ class Dimensions {
|
||||
invariant(dimensions[dim], 'No dimension set for key ' + dim);
|
||||
return dimensions[dim];
|
||||
}
|
||||
|
||||
/**
|
||||
* Add an event handler. Supported events:
|
||||
*
|
||||
* - `change`: Fires when a property within the `Dimensions` object changes. The argument
|
||||
* to the event handler is an object with `window` and `screen` properties whose values
|
||||
* are the same as the return values of `Dimensions.get('window')` and
|
||||
* `Dimensions.get('screen')`, respectively.
|
||||
*/
|
||||
static addEventListener(
|
||||
type: string,
|
||||
handler: Function
|
||||
) {
|
||||
invariant(
|
||||
'change' === type,
|
||||
'Trying to subscribe to unknown event: "%s"', type
|
||||
);
|
||||
eventEmitter.addListener(type, handler);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove an event handler.
|
||||
*/
|
||||
static removeEventListener(
|
||||
type: string,
|
||||
handler: Function
|
||||
) {
|
||||
invariant(
|
||||
'change' === type,
|
||||
'Trying to remove listener for unknown event: "%s"', type
|
||||
);
|
||||
eventEmitter.removeListener(type, handler);
|
||||
}
|
||||
}
|
||||
|
||||
Dimensions.set(UIManager.Dimensions);
|
||||
|
||||
Reference in New Issue
Block a user