web-dev-qa-db-fra.com

Android Composez: Comment utiliser des balises HTML dans une vue texte

J'ai en tant que chaîne d'une source extérieure contenant des balises HTML dans ce format: "Bonjour, je suis <B> Bold </ B> Texte"

Avant de comporter, je disposerais de CDATA au début de ma chaîne HTML, utilisée HTML.FromHTML () à convertir à un RaNaned et qui l'a transmis au TextView. Le TextView leur aurait-il le mot audacieux en gras.

J'ai essayé de reproduire cela avec composition mais je ne trouve pas les étapes exactes pour me permettre de le réaliser avec succès.

Toute suggestion reçue gratitude.

15
William

Suite au guide sur style avec balisage HTML , et y combinant avec Réponse de Sven , j'ai proposé cette fonction pouvant être utilisée comme la fonction intégrée stringResource() une fonction:

/**
 * Load a styled string resource with formatting.
 *
 * @param id the resource identifier
 * @param formatArgs the format arguments
 * @return the string data associated with the resource
 */
@Composable
fun annotatedStringResource(@StringRes id: Int, vararg formatArgs: Any): AnnotatedString {
    val text = stringResource(id, *formatArgs)
    val spanned = remember(text) {
        HtmlCompat.fromHtml(text, HtmlCompat.FROM_HTML_MODE_LEGACY)
    }
    return remember(spanned) {
        buildAnnotatedString {
            append(spanned.toString())
            spanned.getSpans(0, spanned.length, Any::class.Java).forEach { span ->
                val start = spanned.getSpanStart(span)
                val end = spanned.getSpanEnd(span)
                when (span) {
                    is StyleSpan -> when (span.style) {
                        Typeface.BOLD ->
                            addStyle(SpanStyle(fontWeight = FontWeight.Bold), start, end)
                        Typeface.ITALIC ->
                            addStyle(SpanStyle(fontStyle = FontStyle.Italic), start, end)
                        Typeface.BOLD_ITALIC ->
                            addStyle(
                                SpanStyle(
                                    fontWeight = FontWeight.Bold,
                                    fontStyle = FontStyle.Italic,
                                ),
                                start,
                                end,
                            )
                    }
                    is UnderlineSpan ->
                        addStyle(SpanStyle(textDecoration = TextDecoration.Underline), start, end)
                    is ForegroundColorSpan ->
                        addStyle(SpanStyle(color = Color(span.foregroundColor)), start, end)
                }
            }
        }
    }
}
2
joharei