mise à jour : comme @Andy mentionné ci-dessous, Google a créé HtmlCompat
ce qui peut être utilisé à la place de la méthode ci-dessous. Ajoutez cette dépendance implementation 'androidx.core:core:1.0.1
au fichier build.gradle de votre application. Assurez-vous d'utiliser la dernière version de androidx.core:core
.
Cela vous permet d'utiliser:
HtmlCompat.fromHtml(html, HtmlCompat.FROM_HTML_MODE_LEGACY);
Vous pouvez en savoir plus sur les différents drapeaux sur la documentation HtmlCompat
réponse originale:
dans Android N, ils ont introduit une nouvelle Html.fromHtml
méthode. Html.fromHtml
nécessite désormais un paramètre supplémentaire, nommé flags. Cet indicateur vous donne plus de contrôle sur la façon dont votre code HTML s'affiche.
Sur Android N et supérieur, vous devez utiliser cette nouvelle méthode. L'ancienne méthode est obsolète et peut être supprimée dans les futures versions d'Android.
Vous pouvez créer votre propre méthode Util qui utilisera l'ancienne méthode sur les anciennes versions et la nouvelle méthode sur Android N et supérieur. Si vous n'ajoutez pas de version, vérifiez que votre application s'arrêtera sur les versions inférieures d'Android. Vous pouvez utiliser cette méthode dans votre classe Util.
@SuppressWarnings("deprecation")
public static Spanned fromHtml(String html){
if(html == null){
// return an empty spannable if the html is null
return new SpannableString("");
}else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
// FROM_HTML_MODE_LEGACY is the behaviour that was used for versions below android N
// we are using this flag to give a consistent behaviour
return Html.fromHtml(html, Html.FROM_HTML_MODE_LEGACY);
} else {
return Html.fromHtml(html);
}
}
Vous pouvez convertir le HTML.FROM_HTML_MODE_LEGACY
en un paramètre supplémentaire si vous le souhaitez. Cela vous donne plus de contrôle sur le drapeau à utiliser.
Vous pouvez en savoir plus sur les différents indicateurs dans la
documentation de la classe Html
Html.FROM_HTML_MODE_LEGACY
//noinspection deprecation
commentaire juste sous leelse
pour éviter les avertissements de peluches.J'ai eu beaucoup de ces avertissements et j'utilise toujours FROM_HTML_MODE_LEGACY, j'ai donc créé une classe d'assistance appelée HtmlCompat contenant les éléments suivants:
la source
Comparaison des drapeaux de fromHtml ().
la source
Ou vous pouvez utiliser
androidx.core.text.HtmlCompat
:Documents HtmlCompat
la source
Si vous avez la chance de développer sur Kotlin, créez simplement une fonction d'extension:
Et puis c'est tellement agréable de l'utiliser partout:
la source
Spanned
etreturn
fromHtml
Vous devez utiliser FROM_HTML_MODE_LEGACY
Code
Pour Kotlin
Appel
la source
HtmlCompat.fromHtml("textWithHtmlTags", HtmlCompat.FROM_HTML_MODE_LEGACY)
Du document officiel:
https://developer.android.com/reference/android/text/Html.html
la source
Si vous utilisez Kotlin , j'ai atteint cet objectif en utilisant une extension Kotlin:
Ensuite, appelez-le comme:
la source
Juste pour étendre la réponse de @Rockney et @ k2col, le code amélioré peut ressembler à:
Où le
CompatUtils.isApiNonLowerThan
:La différence est qu'il n'y a pas de variable locale supplémentaire et que la dépréciation est uniquement en
else
branche. Ainsi, cela ne supprimera pas toutes les méthodes, mais une seule branche.Cela peut aider lorsque Google décidera dans certaines futures versions d'Android de déconseiller même la
fromHtml(String source, int flags)
méthode.la source
Vous pouvez utiliser
pour supprimer l'inspection juste pour une seule déclaration mais pas pour toute la méthode.
la source
La classe d'infrastructure a été modifiée pour exiger un indicateur pour indiquer
fromHtml()
comment traiter les sauts de ligne. Cela a été ajouté dans Nougat, et ne touche que le défi des incompatibilités de cette classe entre les versions d'Android.J'ai publié une bibliothèque de compatibilité pour standardiser et rétroporter la classe et inclure plus de rappels pour les éléments et le style:
Bien qu'elle soit similaire à la classe Html du framework, certaines modifications de signature ont été nécessaires pour autoriser plus de rappels. Voici l'exemple de la page GitHub:
la source
minSdkVersion 15
ettargetSdkVersion 23
que j'obtiens une erreur de génération pour values-v24.xml :Error:(3) Error retrieving parent for item: No resource found that matches the given name 'android:TextAppearance.Material.Widget.Button.Borderless.Colored'.
votre bibliothèque cible le niveau 25 de l'API, évidemment. Comment puis-je encore l'utiliser?Voici ma solution.
la source
faites juste une fonction:
la source
Essayez cette petite ligne de code
la source
Essayez ce qui suit pour prendre en charge les balises html de base, y compris les balises ul ol li. Créez un gestionnaire de balises comme indiqué ci-dessous
Définissez le texte sur l'activité comme indiqué ci-dessous
Et le texte html sur les fichiers de chaînes de ressources comme
<! [CDATA [... données html brutes ...]]>
la source