From 9f73edee2df69c529ab8ed8cb7a011a6c08058ee Mon Sep 17 00:00:00 2001 From: Joe Vilches Date: Tue, 29 Oct 2024 17:49:41 -0700 Subject: [PATCH] Fix issue where text would truncate sometimes (#47294) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/47294 TextView will set `setUseLineSpacingFromFallbacks` to `true` for their `StaticLayout`s while we ignore it in this case (`false` default). The docs even recommend setting it to `true`: https://developer.android.com/reference/android/text/StaticLayout.Builder#setUseLineSpacingFromFallbacks(boolean) We set this in the `StaticLayout` builder below, but not up here so lets do that. Changelog: [Internal] Reviewed By: NickGerleman Differential Revision: D65171352 fbshipit-source-id: aa7fd116898c6af9378d71c5c570c790e6ab415f --- .../facebook/react/views/text/TextLayoutManager.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManager.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManager.java index 88211433614..4efd9b5c84b 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManager.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManager.java @@ -404,7 +404,7 @@ public class TextLayoutManager { } int hintWidth = (int) Math.ceil(desiredWidth); - layout = + StaticLayout.Builder builder = StaticLayout.Builder.obtain(text, 0, spanLength, paint, hintWidth) .setAlignment(alignment) .setLineSpacing(0.f, 1.f) @@ -412,8 +412,13 @@ public class TextLayoutManager { .setBreakStrategy(textBreakStrategy) .setHyphenationFrequency(hyphenationFrequency) .setTextDirection( - isScriptRTL ? TextDirectionHeuristics.RTL : TextDirectionHeuristics.LTR) - .build(); + isScriptRTL ? TextDirectionHeuristics.RTL : TextDirectionHeuristics.LTR); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { + builder.setUseLineSpacingFromFallbacks(true); + } + + layout = builder.build(); } else if (boring != null && (unconstrainedWidth || boring.width <= width)) { int boringLayoutWidth = boring.width;