J'ai du HTML simple :
<h2>Title</h2><br>
<p>description here</p>
Je souhaite afficher le texte de style HTML dans celui-ci TextView
. Comment faire ça?
J'ai du HTML simple :
<h2>Title</h2><br>
<p>description here</p>
Je souhaite afficher le texte de style HTML dans celui-ci TextView
. Comment faire ça?
Réponses:
Vous devez utiliser
Html.fromHtml()
pour utiliser HTML dans vos chaînes XML. Le simple fait de référencer une chaîne avec HTML dans votre mise en page XML ne fonctionnera pas.Voici ce que vous devez faire:
la source
h2
par définition crée beaucoup de marge autour de lui. etp
vient également avec une certaine marge. si vous ne voulez pas l'écart, vous voudrez peut-être envisager d'utiliser d'autres éléments html.android.text.Html.fromHtml
. Je sais que la plupart des IDE le corrigent pour vous, mais pour plus de lisibilité, il est plus agréable de connaître les noms des packages.setText (Html.fromHtml (bodyData)) est obsolète après l'api 24. Maintenant, vous devez faire ceci:
la source
Jetez un oeil à ce sujet: https://stackoverflow.com/a/8558249/450148
C'est assez bien aussi !!
Cela ne fonctionne que pour quelques balises.
la source
Si vous voulez pouvoir le configurer via xml sans aucune modification dans le code java, cette idée peut vous être utile. Vous appelez simplement init du constructeur et définissez le texte en html
xml:
la source
Si vous essayez d'afficher du HTML à partir d'un ID de ressource de chaîne, le formatage peut ne pas s'afficher à l'écran. Si cela vous arrive, essayez plutôt d'utiliser des balises CDATA:
...
Voir cet article pour plus de détails.
la source
Le code ci-dessous a donné le meilleur résultat pour moi.
la source
la source
Si vous voulez simplement afficher du texte html et que vous n'en avez pas vraiment besoin
TextView
, prenez-en unWebView
et utilisez-le comme suit:Cela ne vous limite pas non plus à quelques balises html.
la source
layout_height="wrap_content"
. Vous devrez plutôt définir une hauteur explicite ou match_parent.La meilleure approche pour utiliser les sections CData pour la chaîne dans le fichier strings.xml pour obtenir un affichage réel du contenu html dans TextView l'extrait de code ci-dessous vous donnera une idée juste.
La section CData dans le texte de chaîne conserve les données de balise html intact même après avoir formaté le texte à l'aide de la méthode String.format. Ainsi, Html.fromHtml (str) fonctionne correctement et vous verrez le texte en gras dans le message de bienvenue.
Production:
la source
Il convient de mentionner que la méthode Html.fromHtml (String source) est obsolète à partir du niveau d'API 24. Si c'est votre API cible, vous devez utiliser Html.fromHtml (String source, int flags) à la place.
la source
Je voudrais également suggérer le projet suivant: https://github.com/NightWhistler/HtmlSpanner
L'utilisation est presque la même que celle du convertisseur Android par défaut:
Je l'ai trouvé après avoir déjà commencé par la propre implémentation du convertisseur html en spannable, car Html.fromHtml standard ne fournit pas assez de flexibilité sur le contrôle du rendu et même aucune possibilité d'utiliser des polices personnalisées à partir de ttf
la source
Je sais que cette question est ancienne. D'autres réponses suggèrent ici la
Html.fromHtml()
méthode. Je vous suggère d'utiliser àHtmlCompat.fromHtml()
partir duandroidx.core.text.HtmlCompat
package. Comme il s'agit d'une version rétrocompatible deHtml
classe.Exemple de code:
De cette façon, vous pouvez éviter la vérification de la version de l'API Android et c'est facile à utiliser (solution à une seule ligne).
la source
Utilisation simple
Html.fromHtml("html string")
. Cela fonctionnera. Si la chaîne a des balises comme cela, des<h1>
espaces viendront. Mais nous ne pouvons pas éliminer ces espaces. Si vous souhaitez toujours supprimer les espaces, vous pouvez supprimer les balises de la chaîne, puis transmettre la chaîne à la méthodeHtml.fromHtml("html string");
. De manière générale, ces chaînes proviennent également du serveur (dynamique) mais pas souvent, s'il est préférable de transmettre la chaîne telle quelle à la méthode plutôt que de supprimer les balises de la chaîne.la source
la source
Créez une méthode globale comme:
Vous pouvez également l'utiliser dans votre activité / fragment comme:
la source
J'ai implémenté cela en utilisant la vue Web. Dans mon cas, je dois charger l'image de l'URL avec le texte en mode texte et cela fonctionne pour moi.
la source
Il a été suggéré à travers diverses réponses d'utiliser la classe de framework Html comme suggéré ici, mais malheureusement, cette classe a un comportement différent dans différentes versions d'Android et divers bogues non résolus , comme démontré dans les problèmes 214637 , 14778 , 235128 et 75953 .
Vous souhaiterez donc peut-être utiliser une bibliothèque de compatibilité pour normaliser et rétroporter la classe Html sur les versions Android, ce qui inclut davantage de rappels pour les éléments et le style:
Bien qu'elle soit similaire à la classe Html du framework, certaines modifications de signature étaient nécessaires pour autoriser plus de rappels. Voici l'exemple de la page GitHub:
la source
Chaque fois que vous écrivez une vue de texte personnalisée, la fonctionnalité de base du texte HTML sera supprimée de certains appareils.
Nous devons donc suivre les étapes supplémentaires pour faire fonctionner
la source
mise à jour de la réponse ci-dessus
la source
Utilisez le code ci-dessous pour obtenir la solution:
Méthode d'utilité
la source
Création d' extensions Kotlin pour convertir le HTML à partir de String -
la source
Puis-je suggérer une solution quelque peu hacky mais toujours géniale! J'ai eu l'idée de cet article et je l'ai adaptée pour Android. Fondamentalement, vous utilisez un
WebView
et insérez le code HTML que vous souhaitez afficher et modifier dans une balise div modifiable. De cette façon, lorsque l'utilisateur appuie sur leWebView
le clavier apparaît et permet l'édition. Ils vous ajoutent juste du JavaScript pour récupérer le HTML édité et le tour est joué!Voici le code:
Et voici le composant en tant que Gist.
Remarque: Je n'avais pas besoin du rappel de changement de hauteur de la solution d'origine, il manque donc ici, mais vous pouvez facilement l'ajouter si nécessaire.
la source
Si vous utilisez des
androidx.
classes * dans votre projet, vous devez utiliserHtmlCompat.fromHtml(text, flag)
. La source de la méthode est:@NonNull public static Spanned fromHtml(@NonNull String source, @FromHtmlFlags int flags) { if (Build.VERSION.SDK_INT >= 24) { return Html.fromHtml(source, flags); } //noinspection deprecation return Html.fromHtml(source); }
C'est mieux que Html.fromHtml car il y a moins de code, une seule ligne et la façon recommandée de l'utiliser.
la source
Vous pouvez utiliser une fonction d'extension Kotlin simple comme ceci:
Et l'utilisation:
la source
Utilisez simplement:
la source