mirror of
https://github.com/zhigang1992/react-native.git
synced 2026-05-04 21:09:21 +08:00
Size height of Android Text component based on includeFontPadding style
Summary: Overview - This PR resolves the issue described in #14606. This PR makes Text components take into account the includeFontPadding property when calculating their size. Background - Currently, on Android, when includeFontPadding is set to false, the React Text component does not adjust its height. This makes it difficult to lay out other components at a precise spacing relative to a Text component. iOS calculates the height of a UILabel based on the font's descent + ascent. Android lets you choose whether to calculate the height of a TextView based on the font's top + bottom (includeFontPadding=true) or ascent + descent (includeFontPadding=false). In order for a text component to be the same size on iOS and Android (relative to the rest of the layout in points and dips), one should set includeFontPadding=false on Android - but the React Text component needs to take this property into account when sizing itself for this to work. Please see this stack overflow post for a visual explanation of the difference between a font's ascent/descent and top/bottom - https://stackoverflow.com/questions/27631736/meaning-of-top-ascent-baseline-descent-bottom-and-leading-in-androids-font Testing - Please see the attached screenshots to see the height difference of a Text component with this PR when includeFontPadding is true vs false. The font I am using has an ascent + descent = em-size so that the height of the Text component will be equal to the font-size for a single line of text. This is to clearly show the additional height that includeFontPadding=true adds to the Text component. For Text components that are styled in the same way, When includeFontPadding=true, height = ~29.714 dips When includeFontPadding=false, height= 24 dips <img width="342" alt="includefontpaddingtrue" src="https://user-images.githubusercontent.com/1437344/27299391-3eec9de0-54fa-11e7-81d5-d0aeb40e8e27.png"> <img width="346" alt="includefontpaddingfalse" src="https://user-images.githubusercontent.com/1437344/27299401-45c95248-54fa-11e7-98d7-17dd152d3cb8.png"> Closes https://github.com/facebook/react-native/pull/14609 Reviewed By: AaaChiuuu Differential Revision: D5587602 Pulled By: achen1 fbshipit-source-id: 6d2f12ba72ec7462676645519cd27820279278eb
This commit is contained in:
committed by
Facebook Github Bot
parent
f6de2e4a9b
commit
9f5bdd7b49
@@ -57,6 +57,7 @@ import com.facebook.react.uimanager.annotations.ReactProp;
|
||||
private float mSpacingAdd = 0.0f;
|
||||
private int mNumberOfLines = Integer.MAX_VALUE;
|
||||
private int mAlignment = Gravity.NO_GRAVITY;
|
||||
private boolean mIncludeFontPadding = true;
|
||||
|
||||
public RCTText() {
|
||||
setMeasureFunction(this);
|
||||
@@ -94,7 +95,7 @@ import com.facebook.react.uimanager.annotations.ReactProp;
|
||||
(int) Math.ceil(width),
|
||||
widthMode,
|
||||
TextUtils.TruncateAt.END,
|
||||
true,
|
||||
mIncludeFontPadding,
|
||||
mNumberOfLines,
|
||||
mNumberOfLines == 1,
|
||||
text,
|
||||
@@ -158,7 +159,7 @@ import com.facebook.react.uimanager.annotations.ReactProp;
|
||||
(int) Math.ceil(right - left),
|
||||
YogaMeasureMode.EXACTLY,
|
||||
TextUtils.TruncateAt.END,
|
||||
true,
|
||||
mIncludeFontPadding,
|
||||
mNumberOfLines,
|
||||
mNumberOfLines == 1,
|
||||
mText,
|
||||
@@ -223,6 +224,11 @@ import com.facebook.react.uimanager.annotations.ReactProp;
|
||||
notifyChanged(true);
|
||||
}
|
||||
|
||||
@ReactProp(name = ViewProps.INCLUDE_FONT_PADDING, defaultBoolean = true)
|
||||
public void setIncludeFontPadding(boolean includepad) {
|
||||
mIncludeFontPadding = includepad;
|
||||
}
|
||||
|
||||
@Override
|
||||
/* package */ void updateNodeRegion(
|
||||
float left,
|
||||
|
||||
Reference in New Issue
Block a user