actualización : como @Andy menciona a continuación, Google ha creado lo HtmlCompat
que se puede usar en lugar del método a continuación. Agregue esta dependencia implementation 'androidx.core:core:1.0.1
al archivo build.gradle de su aplicación. Asegúrate de usar la última versión de androidx.core:core
.
Esto le permite usar:
HtmlCompat.fromHtml(html, HtmlCompat.FROM_HTML_MODE_LEGACY);
Puede leer más acerca de los diferentes indicadores en la documentación HtmlCompat
respuesta original:
en Android N introdujeron un nuevo Html.fromHtml
método. Html.fromHtml
ahora requiere un parámetro adicional, llamado flags. Esta bandera te da más control sobre cómo se muestra tu HTML.
En Android N y superior, debe usar este nuevo método. El método anterior está en desuso y puede eliminarse en las futuras versiones de Android.
Puede crear su propio método Util que utilizará el método anterior en versiones anteriores y el método más nuevo en Android N y superior. Si no agrega una versión, verifique que su aplicación se rompa en versiones inferiores de Android. Puede usar este método en su clase Util.
@SuppressWarnings("deprecation")
public static Spanned fromHtml(String html){
if(html == null){
// return an empty spannable if the html is null
return new SpannableString("");
}else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
// FROM_HTML_MODE_LEGACY is the behaviour that was used for versions below android N
// we are using this flag to give a consistent behaviour
return Html.fromHtml(html, Html.FROM_HTML_MODE_LEGACY);
} else {
return Html.fromHtml(html);
}
}
Puede convertirlo HTML.FROM_HTML_MODE_LEGACY
en un parámetro adicional si lo desea. Esto le da más control sobre qué bandera usar.
Puede leer más sobre los diferentes indicadores en la
documentación de la clase Html
Html.FROM_HTML_MODE_LEGACY
//noinspection deprecation
comentario justo debajo deelse
para evitar advertencias de pelusa.Tenía muchas de estas advertencias y siempre uso FROM_HTML_MODE_LEGACY, así que hice una clase auxiliar llamada HtmlCompat que contiene lo siguiente:
fuente
Comparación de las banderas de fromHtml ().
fuente
O puedes usar
androidx.core.text.HtmlCompat
:Documentos HTML Compat
fuente
Si tiene la suerte de desarrollar en Kotlin, simplemente cree una función de extensión:
Y luego es tan dulce usarlo en todas partes:
fuente
Spanned
yreturn
fromHtml
Deberías usar FROM_HTML_MODE_LEGACY
Código
Para Kotlin
Llamada
fuente
HtmlCompat.fromHtml("textWithHtmlTags", HtmlCompat.FROM_HTML_MODE_LEGACY)
Del documento oficial:
https://developer.android.com/reference/android/text/Html.html
fuente
Si estás usando Kotlin , lo logré usando una extensión de Kotlin:
Entonces llámalo como:
fuente
Solo para extender la respuesta de @Rockney y @ k2col, el código mejorado puede verse así:
Donde el
CompatUtils.isApiNonLowerThan
:La diferencia es que no hay variables locales adicionales y la degradación es solo en
else
rama. Por lo tanto, esto no suprimirá todos los métodos excepto una sola rama.Puede ayudar cuando Google decida en algunas versiones futuras de Android desaprobar incluso el
fromHtml(String source, int flags)
método.fuente
Puedes usar
para suprimir la inspección solo para una sola declaración pero no todo el método.
fuente
La clase de marco se ha modificado para requerir un indicador para informar
fromHtml()
cómo procesar saltos de línea. Esto se agregó en Nougat, y solo toca el desafío de las incompatibilidades de esta clase en todas las versiones de Android.He publicado una biblioteca de compatibilidad para estandarizar y respaldar la clase e incluir 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
minSdkVersion 15
ytargetSdkVersion 23
obtengo un error de compilación para values-v24.xml :Error:(3) Error retrieving parent for item: No resource found that matches the given name 'android:TextAppearance.Material.Widget.Button.Borderless.Colored'.
su biblioteca apunta al nivel 25 de API, obviamente. ¿Cómo puedo seguir usándolo?Aquí está mi solución.
fuente
solo haz una función:
fuente
Prueba esta pequeña línea de código
fuente
Pruebe lo siguiente para admitir etiquetas html básicas, incluidas las etiquetas ul ol li. Cree un controlador de etiquetas como se muestra a continuación
Establezca el texto en Actividad como se muestra a continuación
Y texto html en archivos de cadena de recursos como
<! [CDATA [... datos html sin procesar ...]]>
fuente