From 86321a35c03df340b6c1ea740ea7f29e2659b0ab Mon Sep 17 00:00:00 2001 From: Lulu Wu Date: Wed, 24 Feb 2021 12:16:25 -0800 Subject: [PATCH] Fix text in ReactTextView being vertically displayed Summary: ## Issue: Sometimes ReactTextView are vertically displayed as one column with bridgeless. ## Root cause: After debugging, I found out this is caused by a workaround in 2016 to fix a crash caused by mLayout occasionally being non-null and triggers relayout during setText. https://github.com/facebook/react-native/pull/7011 ## Fix Revert previous hack, if the crash happens again I'll try to fix it. Changelog: [Android][Fixed] - Fix text in ReactTextView sometimes being vertically displayed Reviewed By: mdvacca Differential Revision: D26581756 fbshipit-source-id: a373d84dc1ab3d787bda7ec82f2d0865a354cf60 --- .../facebook/react/config/ReactFeatureFlags.java | 3 +++ .../facebook/react/views/text/ReactTextView.java | 13 ++++++++----- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/config/ReactFeatureFlags.java b/ReactAndroid/src/main/java/com/facebook/react/config/ReactFeatureFlags.java index c195ab8e7bc115..5f493dbf55ee83 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/config/ReactFeatureFlags.java +++ b/ReactAndroid/src/main/java/com/facebook/react/config/ReactFeatureFlags.java @@ -59,4 +59,7 @@ public class ReactFeatureFlags { /** Enables a more aggressive cleanup during destruction of ReactContext */ public static boolean enableReactContextCleanupFix = false; + + /** Enables setting layout params to empty to fix a crash */ + public static boolean enableSettingEmptyLayoutParams = false; } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextView.java b/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextView.java index f7a0a18995fe75..85e5cdd62e8954 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextView.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextView.java @@ -31,6 +31,7 @@ import com.facebook.react.bridge.WritableArray; import com.facebook.react.bridge.WritableMap; import com.facebook.react.common.ReactConstants; +import com.facebook.react.config.ReactFeatureFlags; import com.facebook.react.uimanager.PixelUtil; import com.facebook.react.uimanager.ReactCompoundView; import com.facebook.react.uimanager.UIManagerModule; @@ -265,11 +266,13 @@ public int compare(Object o1, Object o2) { public void setText(ReactTextUpdate update) { mContainsImages = update.containsImages(); - // Android's TextView crashes when it tries to relayout if LayoutParams are - // null; explicitly set the LayoutParams to prevent this crash. See: - // https://github.com/facebook/react-native/pull/7011 - if (getLayoutParams() == null) { - setLayoutParams(EMPTY_LAYOUT_PARAMS); + if (ReactFeatureFlags.enableSettingEmptyLayoutParams) { + // Android's TextView crashes when it tries to relayout if LayoutParams are + // null; explicitly set the LayoutParams to prevent this crash. See: + // https://github.com/facebook/react-native/pull/7011 + if (getLayoutParams() == null) { + setLayoutParams(EMPTY_LAYOUT_PARAMS); + } } Spannable spannable = update.getText(); if (mLinkifyMaskType > 0) {