studio programacion herramientas fundamentos con avanzado aplicaciones android textview

android - programacion - Especificación de "tachado" en una sección del texto de TextView



manual de android en pdf (6)

Tengo un bloque de texto proveniente de un servicio web y, dependiendo de algunas etiquetas que he predefinido, quiero aplicar un estilo al texto antes de configurarlo en mi TextView. Para negrita, cursiva y subrayado, pude hacerlo fácilmente con el comando replaceAll:

PageText = PageText.replaceAll("//*([a-zA-Z0-9]+)//*", "<b>$1</b>"); PageText = PageText.replaceAll("=([a-zA-Z0-9]+)=", "<i>$1</i>"); PageText = PageText.replaceAll("_([a-zA-Z0-9]+)_", "<u>$1</u>"); txtPage.setText(Html.fromHtml(PageText), TextView.BufferType.SPANNABLE);

Entonces, para poner una palabra en negrita, rodéala con * ''s, para cursivas, rodea con _.

Pero, por tachado, Html.fromHtml no admite la etiqueta "strike", por lo que no se puede hacer de la misma manera. He visto ejemplos del uso de Spannable para establecer el estilo en una sección del texto, pero requiere números de posición. Por lo tanto, supongo que podría recorrer el texto, buscando - (la etiqueta para representar la huelga), luego buscar el siguiente, abarcar el texto intermedio y repetir para todas esas cadenas. Terminará siendo 10 líneas de código de bucle en lugar de 1 para los demás, así que me pregunto si hay una solución más elegante por ahí.




La solución @Suresh funciona si desea tachar todo el TextView, pero si desea tachar solo algunas partes del texto, use el código a continuación.

tvMRP.setText(text, TextView.BufferType.SPANNABLE); Spannable spannable = (Spannable) tvMRP.getText(); spannable.setSpan(new StrikethroughSpan(), 3, text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

Aquí el text es el texto que queremos que muestre TextView, 3 es el no. de caracteres (comenzando desde 0) desde donde comenzará el tachado.


Parece que no es realmente compatible, al menos no funciona en Android 3.1.

@ RMS2 si el texto es pequeño, puede dividirlo en dos o tres vistas de texto separadas y aplicar la marca solo a la que desea, no es perfecto para textos largos;


Puede hacerlo con un TagHandler personalizado como el de esta pregunta SO :

Spanned parsed = Html.fromHtml(PageText, null, new MyHtmlTagHandler());

Y el TagHandler implementa los métodos:

public void handleTag(boolean opening, String tag, Editable output, XMLReader xmlReader) { if(tag.equalsIgnoreCase("strike") || tag.equals("s")) { processStrike(opening, output); } } ....


Si solo se trata de TextView, puede utilizar las banderas de pintura.

TextView tv=(TextView) v.findViewById(android.R.id.text1); tv.setPaintFlags(tv.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);