J'ai de simples HTML :
<h2>Title</h2><br>
<p>description here</p>
Je veux afficher du texte stylé en HTML en TextView
. Comment faire ?
J'ai de simples HTML :
<h2>Title</h2><br>
<p>description here</p>
Je veux afficher du texte stylé en HTML en TextView
. Comment faire ?
Je me permets de suggérer une solution un peu bricolée mais tout de même géniale ! J'ai eu l'idée de cet article et l'a adapté pour Android. En gros, vous utilisez un WebView
et insérez le HTML que vous souhaitez afficher et modifier dans une balise div modifiable. De cette façon, lorsque l'utilisateur tape sur le bouton WebView
le clavier apparaît et permet l'édition. Il suffit d'ajouter un peu de JavaScript pour récupérer le HTML modifié et voilà !
Voici le code :
public class HtmlTextEditor extends WebView {
class JsObject {
// This field always keeps the latest edited text
public String text;
@JavascriptInterface
public void textDidChange(String newText) {
text = newText.replace("\n", "");
}
}
private JsObject mJsObject;
public HtmlTextEditor(Context context, AttributeSet attrs) {
super(context, attrs);
getSettings().setJavaScriptEnabled(true);
mJsObject = new JsObject();
addJavascriptInterface(mJsObject, "injectedObject");
setWebViewClient(new WebViewClient(){
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
loadUrl(
"javascript:(function() { " +
" var editor = document.getElementById(\"editor\");" +
" editor.addEventListener(\"input\", function() {" +
" injectedObject.textDidChange(editor.innerHTML);" +
" }, false)" +
"})()");
}
});
}
public void setText(String text) {
if (text == null) { text = ""; }
String editableHtmlTemplate = "<!DOCTYPE html>" + "<html>" + "<head>" + "<meta name=\"viewport\" content=\"initial-scale=1.0\" />" + "</head>" + "<body>" + "<div id=\"editor\" contenteditable=\"true\">___REPLACE___</div>" + "</body>" + "</html>";
String editableHtml = editableHtmlTemplate.replace("___REPLACE___", text);
loadData(editableHtml, "text/html; charset=utf-8", "UTF-8");
// Init the text field in case it's read without editing the text before
mJsObject.text = text;
}
public String getText() {
return mJsObject.text;
}
}
Et ici est le composant en tant que Gist.
Note : Je n'ai pas eu besoin du rappel de changement de hauteur de la solution originale, il est donc absent ici mais vous pouvez facilement l'ajouter si nécessaire.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
8 votes
Voulez-vous afficher les balises ou les omettre ?
1 votes
Consultez ce lien pour un exemple fonctionnel javatechig.com/2013/04/07/how-to-display-html-in-Android-view
1 votes
Si vous cherchez la solution de l'obsolescence, c'est ici. stackoverflow.com/questions/37904739/
1 votes
Textview.setText(Html.fromHtml("your HTML")) ; est la meilleure méthode pour afficher uniquement les balises HTML. Il existe également une méthode pour jouer du JS.
0 votes
Android ne prend pas en charge toutes les balises HTML. Vérifiez ceci arkapp.medium.com/Android-set-html-in-text-view-b912e1a96b21 pour mieux comprendre comment utiliser l'affichage du texte.