diff --git a/ReactAndroid/src/main/java/com/facebook/react/flat/RCTText.java b/ReactAndroid/src/main/java/com/facebook/react/flat/RCTText.java index e10278171..4e07754ff 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/flat/RCTText.java +++ b/ReactAndroid/src/main/java/com/facebook/react/flat/RCTText.java @@ -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, diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewProps.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewProps.java index e3a6fb024..fe71f1d2d 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewProps.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewProps.java @@ -92,6 +92,7 @@ public class ViewProps { public static final String TEXT_BREAK_STRATEGY = "textBreakStrategy"; public static final String ALLOW_FONT_SCALING = "allowFontScaling"; + public static final String INCLUDE_FONT_PADDING = "includeFontPadding"; public static final String BORDER_WIDTH = "borderWidth"; public static final String BORDER_LEFT_WIDTH = "borderLeftWidth"; diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextShadowNode.java b/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextShadowNode.java index 97408da5a..4ceee69cf 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextShadowNode.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextShadowNode.java @@ -258,12 +258,12 @@ public class ReactTextShadowNode extends LayoutShadowNode { Layout.Alignment.ALIGN_NORMAL, 1.f, 0.f, - true); + mIncludeFontPadding); } else { layout = StaticLayout.Builder.obtain(text, 0, text.length(), textPaint, hintWidth) .setAlignment(Layout.Alignment.ALIGN_NORMAL) .setLineSpacing(0.f, 1.f) - .setIncludePad(true) + .setIncludePad(mIncludeFontPadding) .setBreakStrategy(mTextBreakStrategy) .setHyphenationFrequency(Layout.HYPHENATION_FREQUENCY_NORMAL) .build(); @@ -280,7 +280,7 @@ public class ReactTextShadowNode extends LayoutShadowNode { 1.f, 0.f, boring, - true); + mIncludeFontPadding); } else { // Is used for multiline, boring text and the width is known. @@ -292,12 +292,12 @@ public class ReactTextShadowNode extends LayoutShadowNode { Layout.Alignment.ALIGN_NORMAL, 1.f, 0.f, - true); + mIncludeFontPadding); } else { layout = StaticLayout.Builder.obtain(text, 0, text.length(), textPaint, (int) width) .setAlignment(Layout.Alignment.ALIGN_NORMAL) .setLineSpacing(0.f, 1.f) - .setIncludePad(true) + .setIncludePad(mIncludeFontPadding) .setBreakStrategy(mTextBreakStrategy) .setHyphenationFrequency(Layout.HYPHENATION_FREQUENCY_NORMAL) .build(); @@ -351,6 +351,7 @@ public class ReactTextShadowNode extends LayoutShadowNode { private boolean mIsUnderlineTextDecorationSet = false; private boolean mIsLineThroughTextDecorationSet = false; + private boolean mIncludeFontPadding = true; /** * mFontStyle can be {@link Typeface#NORMAL} or {@link Typeface#ITALIC}. @@ -559,6 +560,11 @@ public class ReactTextShadowNode extends LayoutShadowNode { } } + @ReactProp(name = ViewProps.INCLUDE_FONT_PADDING, defaultBoolean = true) + public void setIncludeFontPadding(boolean includepad) { + mIncludeFontPadding = includepad; + } + @ReactProp(name = ViewProps.TEXT_DECORATION_LINE) public void setTextDecorationLine(@Nullable String textDecorationLineString) { mIsUnderlineTextDecorationSet = false; diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextViewManager.java b/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextViewManager.java index 77591a815..392ee1d30 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextViewManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextViewManager.java @@ -152,7 +152,7 @@ public class ReactTextViewManager extends BaseViewManager