Tengo HTML simple :
<h2>Title</h2><br>
<p>description here</p>
Quiero mostrar texto con estilo HTML en él TextView
. ¿Como hacer esto?
android
html
xml-parsing
textview
UMAR
fuente
fuente
Respuestas:
Debe usar
Html.fromHtml()
para usar HTML en sus cadenas XML. Simplemente hacer referencia a una Cadena con HTML en su diseño XML no funcionará.Esto es lo que debes hacer:
fuente
h2
por definición crea mucho margen a su alrededor. yp
también viene con cierto margen. Si no desea la brecha, puede considerar usar otros elementos html.android.text.Html.fromHtml
. Sé que la mayoría de los IDEs lo arreglarán por usted, pero para facilitar la lectura, es mejor conocer los nombres de los paquetes.setText (Html.fromHtml (bodyData)) está en desuso después de la API 24. Ahora debe hacer esto:
fuente
Echa un vistazo a esto: https://stackoverflow.com/a/8558249/450148
¡También es bastante bueno!
Funciona solo para algunas etiquetas.
fuente
Si desea poder configurarlo a través de xml sin ninguna modificación en el código de Java, puede encontrar esta idea útil. Simplemente llame a init desde el constructor y configure el texto como html
xml:
fuente
Si está intentando mostrar HTML desde una identificación de recurso de cadena, es posible que el formato no se muestre en la pantalla. Si eso le sucede, intente usar etiquetas CDATA en su lugar:
...
Vea esta publicación para más detalles.
fuente
El siguiente código me dio el mejor resultado.
fuente
fuente
Si solo desea mostrar texto html y realmente no necesita un
TextView
, entonces tome unWebView
y úselo como sigue:Esto tampoco lo restringe a unas pocas etiquetas html.
fuente
layout_height="wrap_content"
. Tendrás que establecer una altura explícita o match_parent en su lugar.El mejor enfoque para usar secciones CData para la cadena en el archivo strings.xml para obtener una visualización real del contenido html en TextView, el fragmento de código a continuación le dará la idea justa.
La sección CData en el texto de cadena mantiene intactos los datos de la etiqueta html incluso después de formatear el texto usando el método String.format. Entonces, Html.fromHtml (str) funciona bien y verá el texto en negrita en el mensaje de bienvenida.
Salida:
fuente
Vale la pena mencionar que el método Html.fromHtml (String source) está en desuso a partir del nivel de API 24. Si esa es su API de destino, debería usar Html.fromHtml (String source, int flags) en su lugar.
fuente
También me gustaría sugerir el siguiente proyecto: https://github.com/NightWhistler/HtmlSpanner
El uso es casi el mismo que el convertidor de Android predeterminado:
Lo encontré después de que ya comencé con la implementación propia del convertidor html a spannable, porque Html.fromHtml estándar no proporciona suficiente flexibilidad sobre el control de representación e incluso no hay posibilidad de usar fuentes personalizadas desde ttf
fuente
Sé que esta pregunta es vieja. Otras respuestas aquí sugieren
Html.fromHtml()
método. Te sugiero que usesHtmlCompat.fromHtml()
delandroidx.core.text.HtmlCompat
paquete. Como esta es una versión deHtml
clase compatible con versiones anteriores .Código de muestra:
De esta manera, puede evitar la verificación de la versión de la API de Android y es fácil de usar (solución de línea única).
fuente
Uso simple
Html.fromHtml("html string")
. Esto funcionará Si la cadena tiene etiquetas como<h1>
entonces vendrán espacios. Pero no podemos eliminar esos espacios. Si aún desea eliminar los espacios, puede eliminar las etiquetas en la cadena y luego pasar la cadena al métodoHtml.fromHtml("html string");
. También, en general, estas cadenas provienen del servidor (dinámico), pero no con frecuencia, si es el caso, es mejor pasar la cadena como está al método que intentar eliminar las etiquetas de la cadena.fuente
fuente
Haz un método global como:
También puede usarlo en su Actividad / Fragmento como:
fuente
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í.
fuente
Se ha sugerido a través de varias respuestas usar la clase de marco Html como se sugiere aquí, pero desafortunadamente esta clase tiene un comportamiento diferente en diferentes versiones de Android y varios errores no solucionados, como se demuestra en los números 214637 , 14778 , 235128 y 75953 .
Por lo tanto, es posible que desee utilizar una biblioteca de compatibilidad para estandarizar y respaldar la clase Html en las versiones de Android que incluye más devoluciones de llamada para elementos y estilo:
Si bien es similar a la clase Html del marco, se requirieron algunos cambios de firma para permitir más devoluciones de llamada. Aquí está la muestra de la página de GitHub:
fuente
Cada vez que escriba una vista de texto personalizada, la función de texto del conjunto HTML básico desaparecerá de algunos de los dispositivos.
Por lo tanto, debemos hacer los siguientes pasos adicionales: hacer que funcione
fuente
actualización de la respuesta anterior
fuente
Use el siguiente código para obtener la solución:
Método de utilería
fuente
Creé extensiones de Kotlin para convertir html de String -
fuente
¿Puedo sugerir una solución un tanto hacky pero genial? Obtuve la idea de este artículo y la adapté para Android. Básicamente, usa
WebView
ay inserta el HTML que desea mostrar y editar en una etiqueta div editable. De esta forma, cuando el usuario tocaWebView
el teclado, aparece el teclado y permite la edición. ¡Simplemente agregue algo de JavaScript para recuperar el HTML editado y listo!Aquí está el código:
Y aquí está el componente como un Gist.
Nota: no necesitaba la devolución de llamada de cambio de altura de la solución original, por lo que falta aquí, pero puede agregarla fácilmente si es necesario.
fuente
Si usa
androidx.
* clases en su proyecto, debe usarHtmlCompat.fromHtml(text, flag)
. La fuente del método es:@NonNull public static Spanned fromHtml(@NonNull String source, @FromHtmlFlags int flags) { if (Build.VERSION.SDK_INT >= 24) { return Html.fromHtml(source, flags); } //noinspection deprecation return Html.fromHtml(source); }
Es mejor manera que Html.fromHtml ya que hay menos código, solo una línea y la forma recomendada de usarlo.
fuente
Puede usar una función de extensión Kotlin simple como esta:
Y uso:
fuente
Simplemente use:
fuente