2016-10-23 3 views
2

J'ai un TextView personnalisé, pour afficher le texte html. Pour les appareils pré-Nougat, cela fonctionne. Comme vous le savez déjà Nougat, fromHtml est dépréciée et il a besoin d'un flag..so mon code est comme çaHtml.fromHtml sur Nougat n'appelle pas personnalisé HtmlHandler

Spannable s = getRichText(text); 
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) { 
    super.setText(Html.fromHtml(s.toString(), Html.FROM_HTML_MODE_COMPACT, this, new HtmlHandler(getContext())), BufferType.SPANNABLE); 
} else { 
    super.setText(Html.fromHtml(s.toString(), this, new HtmlHandler(getContext())), BufferType.SPANNABLE); 
} 

Le problème ce que la classe HtmlHandler est jamais appelé se. (J'ai déjà essayé tous les drapeaux). Sur HtmlHandler Je gère les étiquettes et les styles, par exemple background-color, color et cetera. J'ai mis en œuvre pour obtenir des couleurs de rgb, rgba, hls etc Mais sur Nougat il n'accepte que des couleurs avec hex, car sur Nougat, fromHTML peut "lire" les couleurs et les montrer. Pourquoi cela arrive-t-il? Comment puis-je garder mon chemin pour les couleurs? Si vous n'avez pas compris quelque chose, ou si vous avez besoin de plus de détails, faites le moi savoir.

Le html que j'utilise pour le test est

<p><strong>Server</strong><u> message</u><strong><u>!!!</strong></u> <span style="background-color: rgb(255,0,0);">Not working on Nugat</span></p> 
+0

Pourriez-vous éditer votre question et fournir un échantillon du code HTML, plus une indication de ce qui n'est pas routé vers votre TagHandler (où il était avant la version 7.0)? Par exemple, 'Html' a supporté' 'pendant un certain temps. Je vois que 7.1 (et probablement 7.0) gère maintenant les balises '', alors qu'il ne l'a pas fait auparavant - est-ce là où réside votre problème? – CommonsWare

+0

Je modifie la question. Le problème n'est pas le 'span '. Parce que cela ne fonctionne ni avec 'div' ni avec' p'. Le problème est que ma classe 'HtmlHandler' n'est jamais appelée. C'est la partie bizarre –

+0

Dans mon TagHandler je vérifie les styles 'ol',' ul', 'strike',' code', 'span',' div' et pour les styles css pour 'background-color',' color' et pour fontawesome, et aucun d'eux ne travaille sur Nougat –

Répondre

5

Html.fromHtml() ne fera que invoquer vos TagHandler pour les balises HTML qui fromHtml() ne reconnaît pas. Dans votre échantillon HTML, vous avez:

  • <p>
  • <strong>
  • <u>
  • <span>

et dans votre premier commentaire, vous mentionnez également div.

de ceux-ci, fromHtml() a traité <p>, <strong> et <u> depuis at least 2010, sinon plus tôt. fromHtml() dans Android 6.0 gère également <div> (voir les lignes 488-489 dans the source), et j'oublie à quel point ce soutien va. Votre TagHandler ne serait pas appelé pour l'une de ces balises, et ce comportement n'est pas particulièrement nouveau.

Android 7.0 a ajouté le support pour <span> (voir les lignes 804-805 de the 7.1 source), et ainsi de code qui devrait un TagHandler à être invoqués <span> seraient différents entre Android 7.0 et les versions précédentes.

En général, la liste des balises prises en charge n'est pas documentée. Google est invité à modifier la liste des tags pris en charge à tout moment.

Vos options sont:

  • vivre avec elle

  • Prenez la source de certains Html.java que vous aimez, factoriser dans votre propre paquet, et utilisez cette copie, la modifier comme vous le voyez adaptent

  • Trouver un autre code source HTML-to-Spannable que vous aimez mieux

+0

Ok, je l'ai eu. Je vais voir ce que je peux faire. Merci beaucoup! –