¿Cómo mostrar HTML en TextView?

Tengo HTML simple:

<h2>Title</h2><br> <p>description here</p> 

Quiero mostrar texto con estilo HTML en TextView . ¿¿¿Como hacer esto???

Cualquier ayuda sería apreciada.

Necesita utilizar Html.fromHtml() para usar HTML en sus cadenas XML. Simplemente hacer referencia a una cadena con HTML en su diseño XML no funcionará.

Por ejemplo (<Android Nougat):

 myTextView.setText(Html.fromHtml("<h2>Title</h2><br><p>Description here</p>")); 

Por ejemplo (> = Android Nougat):

 myTextView.setText(Html.fromHtml("<h2>Title</h2><br><p>Description here</p>", Html.FROM_HTML_MODE_COMPACT)); 

Para distinguir entre las versiones de Android, utilice Build.VERSION.SDK_INT >= Build.VERSION_CODES.N .

Echa un vistazo a esto: https://stackoverflow.com/a/8558249/450148

Es bastante bueno también!

 <resource> <string name="your_string">This is an <u>underline</u> text demo for TextView.</string> </resources> 

Funciona solo para pocas etiquetas.

SetText (Html.fromHtml (bodyData)) está obsoleto después de api 24. Ahora usted tiene que hacer esto:

  if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) { tvDocument.setText(Html.fromHtml(bodyData,Html.FROM_HTML_MODE_LEGACY)); } else { tvDocument.setText(Html.fromHtml(bodyData)); } 

Si desea poder configurarlo a través de xml sin ninguna modificación en el código java, puede encontrar esta idea útil. Simplemente llama a init desde el constructor y establece el texto como html

 public class HTMLTextView extends TextView { ... constructors calling init... private void init(){ setText(Html.fromHtml(getText().toString())); } } 

Xml:

  <com.package.HTMLTextView android:text="@string/about_item_1"/> 

El siguiente código dio el mejor resultado para mí.

 TextView myTextview = (TextView) findViewById(R.id.my_text_view); htmltext = <your html (markup) character>; Spanned sp = Html.fromHtml(htmltext); myTextview.setText(sp); 

Si está intentando mostrar HTML de una identificación de recurso de cadena, es posible que el formato no aparezca en la pantalla. Si eso te está sucediendo, intenta usar etiquetas CDATA en su lugar:

 strings.xml: <string name="sample_string"><![CDATA[<h2>Title</h2><br><p>Description here</p>]]></string> 

 MainActivity.java: text.setText(Html.fromHtml(getString(R.string.sample_string)); 

Vea este post para más detalles.

Vale la pena mencionar que el método Html.fromHtml (String source) está obsoleto a partir del nivel 24 de la API. Si esa es la API de destino, debería usar Html.fromHtml (String source, int flags) .

 String value = "<html> <a href=\"http://example.com/\">example.com</a> </html>"; SiteLink= (TextView) findViewById(R.id.textViewSite); SiteLink.setText(Html.fromHtml(value)); SiteLink.setMovementMethod(LinkMovementMethod.getInstance()); 

Si sólo desea mostrar algún texto html y realmente no necesita un TextView , a continuación, tomar un WebView y utilizarlo como sigue:

 String htmlText = ...; webview.loadData(htmlText , "text/html; charset=UTF-8", null); 

Esto no lo restringe a unas pocas etiquetas html tampoco.

El mejor enfoque para utilizar las secciones de CData para la cadena en el archivo strings.xml para obtener una visualización real del contenido html en el TextView el siguiente fragmento de código le dará la idea justa.

 //in string.xml file <string name="welcome_text"><![CDATA[<b>Welcome,</b> to the forthetyroprogrammers blog Logged in as:]]> %1$s.</string> //and in Java code String welcomStr=String.format(getString(R.string.welcome_text),username); tvWelcomeUser.setText(Html.fromHtml(welcomStr)); 

La sección CData en texto de cadena mantiene los datos de etiqueta html intactos incluso después de formatear texto utilizando el método String.format. Por lo tanto, Html.fromHtml (str) funciona bien y verá el texto en negrita en el mensaje de bienvenida.

Salida:

Bienvenido, a tu tienda de música favorita. Ha iniciado sesión como: nombre de usuario

Uso simple Html.fromHtml("html string") . Esto funcionará. Si la cadena tiene etiquetas como <h1> entonces aparecerán espacios. Pero no podemos eliminar esos espacios. Si todavía desea eliminar los espacios, puede quitar las etiquetas de la cadena y luego pasar la cadena al método Html.fromHtml("html string"); . También generalmente estas cadenas vienen del servidor (dinámico) pero no a menudo, si es el caso mejor pasar la secuencia como es al método que intentan quitar las etiquetas de la cadena.

También me gustaría sugerir el siguiente proyecto: https://github.com/NightWhistler/HtmlSpanner

El uso es casi el mismo que el convertidor androide predeterminado:

 (new HtmlSpanner()).fromHtml() 

Lo encontré después de que ya comenzó por la propia aplicación de html a spannable convertidor, porque Html.fromHtml estándar no proporciona suficiente flexibilidad sobre el control de renderizado e incluso ninguna posibilidad de utilizar fuentes personalizadas de ttf

 String value = html value .... mTextView.setText(Html.fromHtml(value),TextView.BufferType.SPANNABLE) 

He implementado esto usando la vista web. En mi caso, tengo que cargar la imagen de la URL junto con el texto en la vista de texto y esto funciona para mí.

 WebView myWebView =new WebView(_context); String html = childText; String mime = "text/html"; String encoding = "utf-8"; myWebView.getSettings().setJavaScriptEnabled(true); myWebView.loadDataWithBaseURL(null, html, mime, encoding, null); 

Se ha sugerido a través de diversas respuestas utilizar la clase de framework Html como se sugiere aquí, pero desafortunadamente esta clase tiene un comportamiento diferente en diferentes versiones de Android y varios errores no adaptados , como se demuestra en los números 214637 , 14778 , 235128 y 75953 .

Por lo tanto, puede que desee utilizar una biblioteca de compatibilidad para estandarizar y backport la clase Html en las versiones de Android que incluye más devoluciones de llamada para los elementos y el estilo:

https://github.com/Pixplicity/HtmlCompat

Aunque es similar a la clase Html del marco, se requerían algunos cambios de firma para permitir más devoluciones de llamada. Aquí está el ejemplo de la página de GitHub:

 Spanned fromHtml = HtmlCompat.fromHtml(context, source, 0); // You may want to provide an ImageGetter, TagHandler and SpanCallback: //Spanned fromHtml = HtmlCompat.fromHtml(context, source, 0, // imageGetter, tagHandler, spanCallback); textView.setMovementMethod(LinkMovementMethod.getInstance()); textView.setText(fromHtml); 
  • Meta Tag "apple-mobile-web-app-able" para Android?
  • La imagen no se puede mostrar en <input type = "file"> Android 4.0.4
  • ¿Cómo evitar que el navegador Google Chrome android muestre la lupa cuando los usuarios hacen clic en un botón?
  • El texto de la etiqueta aparece como marca de agua en la entrada de formulario (HTC EVO)
  • WebBrowser de Android desplácese hacia abajo
  • Chrome para Android error contenteditable
  • Gestión de múltiples asynctask para descargar múltiples imágenes de código html, fugas ram, cualquier idea?
  • Obtener la altura del contenido de WebView una vez que su Android cargado
  • Corregido el encabezado y el pie de página en la versión para móviles un sitio web
  • desarrollo html para android mobile
  • Cambio del título de la pestaña de íon-nav-bar a imagen - marco iónico
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.