5

Je suis un peu confus au sujet des «règles» de quand un élément TextView affiche du texte sous forme formatée ou non.Formatage HTML pour TextView

Une chaîne comme

"There are <i>different ways</i> of coding.\n"; 

affiche sans mise en forme (y compris les codes HTML) lorsque je code

tvMyTextView.setText("There are <i>different ways</i> of coding.\n"); 

mais quand je définis la même chaîne dans strings.xml puis chargez

tvMyTextView.setText(R.strings.TestString); 

il affiche souligné.

encore plus confus, je me sens en essayant d'intégrer les URL dans TextView est comme ici:

"Click <a href="http://www.poon-world.com">here</a> to switch on the red light.\n"; 

Inutile de dire que je l'ai déjà essayé les différentes options de propriété de TextView - mais ils ne semblent pas faire beaucoup de différence à moins que j'ai raté quelque chose. Dans certains cas, l'URL est codée dans le texte, en couleur bleue et peut être cliqué, dans d'autres, je peux voir le formatage HTML. Dans d'autres encore, il est codé en couleur et l'URL semble être encodée dans le texte d'une manière ou d'une autre - mais rien ne se passe lorsque je clique dessus. En ce qui concerne l'intégration des URL, contrairement à l'autre exemple avec un formatage HTML «simple», je n'ai même pas pu trouver de règle pour savoir quand cela fonctionne et quand ça ne marche pas. Quelqu'un peut-il me aider à dénouer les noeuds dans ma tête ..

+0

essayez ceci MAC

Répondre

5

En fait, à partir du Android Docs ..

public final void setText (CharSequence text) 

Définit la valeur de chaîne de la TextView. TextView n'accepte pas le formatage HTML, que vous pouvez utiliser avec les chaînes de texte dans les fichiers de ressources XML. Pour styliser vos chaînes, associez les objets android.text.style. * À SpannableString ou consultez la documentation Types de ressources disponibles pour obtenir un exemple de définition de texte formaté dans le fichier de ressources XML.

Mais,

public final void setText (int resid) 
  • aucune spécification plus sur elle ..

Mais à partir d'Android docs .. chaîne de ressource

Vous pouvez ajouter un style à vos chaînes avec des balises HTML . Par exemple:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <string name="welcome">Welcome to <b>Android</b>!</string> 
</resources> 

éléments HTML pris en charge incluent:

<b> for bold text. 
<i> for italic text. 
<u> for underline text. 

Parfois, vous pouvez créer une ressource de texte de style qui est également utilisé comme une chaîne de format.Normalement, cela ne fonctionnera pas car la méthode String.format(String, Object...) supprimera toutes les informations de style de la chaîne. La solution consiste à écrire les balises HTML avec des entités échappées, qui sont ensuite récupérées avec fromHtml(String), après le formatage.

Et au sujet de votre chaîne URL, ...

tvMyTextView.setText(Html.fromHtml("Click <a href="http://www.poon-world.com">here</a> to switch on the red light.\n")); 

Regardez aussi cette question SO Set TextView text from html-formatted string resource in XML

et

Android String Resource

0

Pour ajouter quelques notes à mes propres questions et après avoir reçu les réponses jusqu'à présent, je peux seulement conclure qu'il ne semble pas y avoir un moyen fiable qui fonctionne partout.

Dans certains cas - selon mon expérience, si une URL formatée fait partie du texte brut et n'est pas entourée de balises (comme http://www.poon-world.com, même "Poon-World.com" semble fonctionner dans la plupart des cas), simplement définir les propriétés du TextView semble être suffisant et les liens seront cliquables. Cependant, si des liens sont incorporés dans des balises HTML et censés être cliquables à partir de certains textes de liens, il semble qu'il n'y ait pas d'autre choix que d'aller avec Html.fromHtml (..).

Mais il y a aussi quelques cas particuliers que je ne peux pas expliquer: dans certaines activités/mises en page, j'utilise des URL "incorporées" et j'ai défini les propriétés Click déjà mentionnées, n'utilisez pas Html.fromHtml. et surprise !, un clic sur les liens créés dans bien le texte ouvre en effet le navigateur, mais seulement après avoir ajouté la ligne suivante dans le code dans le OnCreate-événement:

myTextView.setMovementMethod(LinkMovementMethod.getInstance()); 

(j'ai trouvé cette astuce dans un autre thread, merci à l'auteur) Aucune idée pourquoi, il semble être la façon dont les ressources de chaîne sont analysées et évaluées par Android. Je viens de mentionner qu'en plus de tout ce qui a déjà été dit, tout le monde à la recherche de solutions et de confusion ne commence pas à penser qu'il commence à perdre la tête - non, il suffit de tester les approches mentionnées ici. faire des exercices.