|
11 | 11 | import static com.facebook.react.views.text.TextAttributeProps.UNSET; |
12 | 12 |
|
13 | 13 | import android.content.Context; |
| 14 | +import android.graphics.Color; |
14 | 15 | import android.graphics.Rect; |
15 | 16 | import android.graphics.Typeface; |
16 | 17 | import android.graphics.drawable.Drawable; |
|
50 | 51 | import com.facebook.react.views.text.CustomLineHeightSpan; |
51 | 52 | import com.facebook.react.views.text.CustomStyleSpan; |
52 | 53 | import com.facebook.react.views.text.ReactAbsoluteSizeSpan; |
| 54 | +import com.facebook.react.views.text.ReactBackgroundColorSpan; |
53 | 55 | import com.facebook.react.views.text.ReactSpan; |
54 | 56 | import com.facebook.react.views.text.ReactTextUpdate; |
55 | 57 | import com.facebook.react.views.text.ReactTypefaceUtils; |
@@ -680,6 +682,16 @@ public boolean test(ReactAbsoluteSizeSpan span) { |
680 | 682 | return span.getSize() == mTextAttributes.getEffectiveFontSize(); |
681 | 683 | } |
682 | 684 | }); |
| 685 | + |
| 686 | + stripSpansOfKind( |
| 687 | + sb, |
| 688 | + ReactBackgroundColorSpan.class, |
| 689 | + new SpanPredicate<ReactBackgroundColorSpan>() { |
| 690 | + @Override |
| 691 | + public boolean test(ReactBackgroundColorSpan span) { |
| 692 | + return span.getBackgroundColor() == mReactBackgroundManager.getBackgroundColor(); |
| 693 | + } |
| 694 | + }); |
683 | 695 | } |
684 | 696 |
|
685 | 697 | private <T> void stripSpansOfKind( |
@@ -717,11 +729,17 @@ private void restoreStyleEquivalentSpans(SpannableStringBuilder workingText) { |
717 | 729 | // (least precedence). This ensures the span is behind any overlapping spans. |
718 | 730 | spanFlags |= Spannable.SPAN_PRIORITY; |
719 | 731 |
|
720 | | - workingText.setSpan( |
721 | | - new ReactAbsoluteSizeSpan(mTextAttributes.getEffectiveFontSize()), |
722 | | - 0, |
723 | | - workingText.length(), |
724 | | - spanFlags); |
| 732 | + List<Object> spans = new ArrayList<>(); |
| 733 | + spans.add(new ReactAbsoluteSizeSpan(mTextAttributes.getEffectiveFontSize())); |
| 734 | + |
| 735 | + int backgroundColor = mReactBackgroundManager.getBackgroundColor(); |
| 736 | + if (backgroundColor != Color.TRANSPARENT) { |
| 737 | + spans.add(new ReactBackgroundColorSpan(backgroundColor)); |
| 738 | + } |
| 739 | + |
| 740 | + for (Object span : spans) { |
| 741 | + workingText.setSpan(span, 0, workingText.length(), spanFlags); |
| 742 | + } |
725 | 743 | } |
726 | 744 |
|
727 | 745 | private static boolean sameTextForSpan( |
|
0 commit comments