From 582d82104e6e75273c21100342dd22b617d9b086 Mon Sep 17 00:00:00 2001 From: Tomasz Hemperek Date: Thu, 28 Mar 2024 18:22:27 +0100 Subject: [PATCH] Add support for RelativeSizeSpan --- README.md | 4 +++- .../charlex/compose/htmltext/example/MainActivity.kt | 12 ++++++++++++ .../java/de/charlex/compose/material/HtmlText.kt | 8 ++++++++ .../java/de/charlex/compose/material3/HtmlText.kt | 8 ++++++++ 4 files changed, 31 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 7fa7e62..b6c7cbc 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,9 @@ Text composable to show html text from resources <span style="color: #0000FF"> - Colored text (Markdown does not allow a preview here)
<span style="color: red"> - Colored text (Markdown does not allow a preview here)
<font color="#FF0000"> - Colored text (Markdown does not allow a preview here)
-<font color="red"> - Colored text (Markdown does not allow a preview here)

+<font color="red"> - Colored text (Markdown does not allow a preview here)
+<big> - BIG TEXT (Markdown does not allow a preview here)
+<small> - small text (Markdown does not allow a preview here)

## MaterialTheme colors in HtmlText To use colors like `MaterialTheme.colors.primary` in `HtmlText`, map simple colors. diff --git a/example/src/main/java/de/charlex/compose/htmltext/example/MainActivity.kt b/example/src/main/java/de/charlex/compose/htmltext/example/MainActivity.kt index f6a4253..3ecc800 100644 --- a/example/src/main/java/de/charlex/compose/htmltext/example/MainActivity.kt +++ b/example/src/main/java/de/charlex/compose/htmltext/example/MainActivity.kt @@ -32,6 +32,8 @@ class MainActivity : ComponentActivity() { MultipleLinks() ReturnLink() ReturnLinks() + BigText() + SmallText() } } } @@ -120,3 +122,13 @@ fun ReturnLinks() { } ) } + +@Composable +fun BigText() { + HtmlText(text = "BIG text") +} + +@Composable +fun SmallText() { + HtmlText(text = "small text") +} diff --git a/material-html-text/src/main/java/de/charlex/compose/material/HtmlText.kt b/material-html-text/src/main/java/de/charlex/compose/material/HtmlText.kt index 52f8c9f..6a03f6e 100644 --- a/material-html-text/src/main/java/de/charlex/compose/material/HtmlText.kt +++ b/material-html-text/src/main/java/de/charlex/compose/material/HtmlText.kt @@ -5,6 +5,7 @@ import android.os.Build.VERSION.SDK_INT import android.text.Html import android.text.Spanned import android.text.style.ForegroundColorSpan +import android.text.style.RelativeSizeSpan import android.text.style.StrikethroughSpan import android.text.style.StyleSpan import android.text.style.URLSpan @@ -41,6 +42,7 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextDecoration import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.TextUnit +import androidx.compose.ui.unit.em import androidx.core.text.getSpans /** @@ -318,6 +320,7 @@ fun Spanned.toAnnotatedString( val colorSpans = getSpans() val underlineSpans = getSpans() val strikethroughSpans = getSpans() + val relativeSizeSpans = getSpans() urlSpans.forEach { urlSpan -> val start = getSpanStart(urlSpan) val end = getSpanEnd(urlSpan) @@ -356,5 +359,10 @@ fun Spanned.toAnnotatedString( val end = getSpanEnd(strikethroughSpan) addStyle(SpanStyle(textDecoration = TextDecoration.LineThrough), start, end) } + relativeSizeSpans.forEach { relativeSizeSpan -> + val start = getSpanStart(relativeSizeSpan) + val end = getSpanEnd(relativeSizeSpan) + addStyle(style = SpanStyle(fontSize = relativeSizeSpan.sizeChange.em), start, end) + } } } diff --git a/material3-html-text/src/main/java/de/charlex/compose/material3/HtmlText.kt b/material3-html-text/src/main/java/de/charlex/compose/material3/HtmlText.kt index 8d91fde..6acdd00 100644 --- a/material3-html-text/src/main/java/de/charlex/compose/material3/HtmlText.kt +++ b/material3-html-text/src/main/java/de/charlex/compose/material3/HtmlText.kt @@ -5,6 +5,7 @@ import android.os.Build.VERSION.SDK_INT import android.text.Html import android.text.Spanned import android.text.style.ForegroundColorSpan +import android.text.style.RelativeSizeSpan import android.text.style.StrikethroughSpan import android.text.style.StyleSpan import android.text.style.URLSpan @@ -41,6 +42,7 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextDecoration import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.TextUnit +import androidx.compose.ui.unit.em import androidx.core.text.getSpans /** @@ -318,6 +320,7 @@ fun Spanned.toAnnotatedString( val colorSpans = getSpans() val underlineSpans = getSpans() val strikethroughSpans = getSpans() + val relativeSizeSpans = getSpans() urlSpans.forEach { urlSpan -> val start = getSpanStart(urlSpan) val end = getSpanEnd(urlSpan) @@ -356,5 +359,10 @@ fun Spanned.toAnnotatedString( val end = getSpanEnd(strikethroughSpan) addStyle(SpanStyle(textDecoration = TextDecoration.LineThrough), start, end) } + relativeSizeSpans.forEach { relativeSizeSpan -> + val start = getSpanStart(relativeSizeSpan) + val end = getSpanEnd(relativeSizeSpan) + addStyle(style = SpanStyle(fontSize = relativeSizeSpan.sizeChange.em), start, end) + } } }