mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Fix rendering of FB emoji in RN Android
Summary: This diff ensures the measurement and rendering of FB emojis is correnct in RN Android. Before this commit we were customizing Spannable object with FB emojis right before rendering the text into the TextView, this diff ensures that the Spannable is "customized" as soon as it is created, ensuring the measurement of the Text. changelog: [internal] Reviewed By: JoshuaGross Differential Revision: D19354107 fbshipit-source-id: 92e07cf30503404f7820f25eaa9efdc02f6bddbd
This commit is contained in:
committed by
Facebook Github Bot
parent
bef845ffd5
commit
475df0699d
@@ -57,6 +57,8 @@ public class ReactTextShadowNode extends ReactBaseTextShadowNode {
|
||||
|
||||
private boolean mShouldNotifyOnTextLayout;
|
||||
|
||||
private @Nullable ReactTextViewManagerCallback mReactTextViewManagerCallback = null;
|
||||
|
||||
private final YogaMeasureFunction mTextMeasureFunction =
|
||||
new YogaMeasureFunction() {
|
||||
@Override
|
||||
@@ -196,6 +198,10 @@ public class ReactTextShadowNode extends ReactBaseTextShadowNode {
|
||||
}
|
||||
}
|
||||
|
||||
public void setReactTextViewManagerCallback(ReactTextViewManagerCallback callback) {
|
||||
mReactTextViewManagerCallback = callback;
|
||||
}
|
||||
|
||||
// Return text alignment according to LTR or RTL style
|
||||
private int getTextAlign() {
|
||||
int textAlign = mTextAlign;
|
||||
@@ -217,6 +223,9 @@ public class ReactTextShadowNode extends ReactBaseTextShadowNode {
|
||||
/* text (e.g. from `value` prop): */ null,
|
||||
/* supportsInlineViews: */ true,
|
||||
nativeViewHierarchyOptimizer);
|
||||
if (mReactTextViewManagerCallback != null) {
|
||||
mReactTextViewManagerCallback.onPostProcessSpannable(mPreparedSpannableText);
|
||||
}
|
||||
markUpdated();
|
||||
}
|
||||
|
||||
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
/*
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
package com.facebook.react.views.text;
|
||||
|
||||
import android.text.Spannable;
|
||||
|
||||
/**
|
||||
* This interface allows clients of {@link ReactTextViewManager} to customize or prepare {@link
|
||||
* Spannable} object that represent text that will be rendered on the screen.
|
||||
*/
|
||||
public interface ReactTextViewManagerCallback {
|
||||
|
||||
/**
|
||||
* Callback executed right after the {@link Spannable} object is created by React.
|
||||
*
|
||||
* <p>This callback can be used by different implementations of ReactTextViewManager to customize
|
||||
* Spannable or extend managed created by React.
|
||||
*/
|
||||
void onPostProcessSpannable(Spannable text);
|
||||
}
|
||||
Reference in New Issue
Block a user