Skip to content

Commit c4a79f1

Browse files
authored
fix: measuring layout for lists and blockquotes - android (#217)
Similar to #214, we have to explicitly inform static layout that those spans affects layout measurements
1 parent d00f113 commit c4a79f1

File tree

3 files changed

+28
-4
lines changed

3 files changed

+28
-4
lines changed

android/src/main/java/com/swmansion/enriched/spans/EnrichedBlockQuoteSpan.kt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,17 @@ import android.graphics.Canvas
44
import android.graphics.Paint
55
import android.text.Layout
66
import android.text.TextPaint
7-
import android.text.style.CharacterStyle
87
import android.text.style.LeadingMarginSpan
8+
import android.text.style.MetricAffectingSpan
99
import com.swmansion.enriched.spans.interfaces.EnrichedBlockSpan
1010
import com.swmansion.enriched.styles.HtmlStyle
1111

1212
// https://android.googlesource.com/platform/frameworks/base/+/refs/heads/main/core/java/android/text/style/QuoteSpan.java
13-
class EnrichedBlockQuoteSpan(private val htmlStyle: HtmlStyle) : CharacterStyle(), LeadingMarginSpan, EnrichedBlockSpan {
13+
class EnrichedBlockQuoteSpan(private val htmlStyle: HtmlStyle) : MetricAffectingSpan(), LeadingMarginSpan, EnrichedBlockSpan {
14+
override fun updateMeasureState(p0: TextPaint) {
15+
// Do nothing, but inform layout that this span affects text metrics
16+
}
17+
1418
override fun getLeadingMargin(p0: Boolean): Int {
1519
return htmlStyle.blockquoteStripeWidth + htmlStyle.blockquoteGapWidth
1620
}

android/src/main/java/com/swmansion/enriched/spans/EnrichedOrderedListSpan.kt

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,21 @@ import android.graphics.Canvas
44
import android.graphics.Paint
55
import android.graphics.Typeface
66
import android.text.Layout
7+
import android.text.TextPaint
78
import android.text.style.LeadingMarginSpan
9+
import android.text.style.MetricAffectingSpan
810
import com.swmansion.enriched.spans.interfaces.EnrichedParagraphSpan
911
import com.swmansion.enriched.styles.HtmlStyle
1012

11-
class EnrichedOrderedListSpan(private var index: Int, private val htmlStyle: HtmlStyle) : LeadingMarginSpan, EnrichedParagraphSpan {
13+
class EnrichedOrderedListSpan(private var index: Int, private val htmlStyle: HtmlStyle) : MetricAffectingSpan(), LeadingMarginSpan, EnrichedParagraphSpan {
14+
override fun updateMeasureState(p0: TextPaint) {
15+
// Do nothing, but inform layout that this span affects text metrics
16+
}
17+
18+
override fun updateDrawState(p0: TextPaint?) {
19+
// Do nothing, but inform layout that this span affects text metrics
20+
}
21+
1222
override fun getLeadingMargin(first: Boolean): Int {
1323
return htmlStyle.olMarginLeft + htmlStyle.olGapWidth
1424
}

android/src/main/java/com/swmansion/enriched/spans/EnrichedUnorderedListSpan.kt

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,22 @@ import android.graphics.Canvas
44
import android.graphics.Paint
55
import android.text.Layout
66
import android.text.Spanned
7+
import android.text.TextPaint
78
import android.text.style.LeadingMarginSpan
9+
import android.text.style.MetricAffectingSpan
810
import com.swmansion.enriched.spans.interfaces.EnrichedParagraphSpan
911
import com.swmansion.enriched.styles.HtmlStyle
1012

1113
// https://android.googlesource.com/platform/frameworks/base/+/refs/heads/main/core/java/android/text/style/BulletSpan.java
12-
class EnrichedUnorderedListSpan(private val htmlStyle: HtmlStyle) : LeadingMarginSpan, EnrichedParagraphSpan {
14+
class EnrichedUnorderedListSpan(private val htmlStyle: HtmlStyle) : MetricAffectingSpan(), LeadingMarginSpan, EnrichedParagraphSpan {
15+
override fun updateMeasureState(p0: TextPaint) {
16+
// Do nothing, but inform layout that this span affects text metrics
17+
}
18+
19+
override fun updateDrawState(p0: TextPaint?) {
20+
// Do nothing, but inform layout that this span affects text metrics
21+
}
22+
1323
override fun getLeadingMargin(p0: Boolean): Int {
1424
return htmlStyle.ulBulletSize + htmlStyle.ulGapWidth + htmlStyle.ulMarginLeft
1525
}

0 commit comments

Comments
 (0)