5

Estoy un poco confundido acerca de las 'reglas' de cuando un elemento TextView muestra texto en formato formateado o no.Formato HTML para TextView

una cadena como

"There are <i>different ways</i> of coding.\n"; 

muestra sin ningún formato (incluyendo los códigos HTML) cuando I Código

tvMyTextView.setText("There are <i>different ways</i> of coding.\n"); 

pero cuando defino la misma cadena en strings.xml y luego cargar

tvMyTextView.setText(R.strings.TestString); 

se muestra enfatizado.

aún más confundido me siento cuando se trata de incrustar direcciones URL en TextView es como aquí:

"Click <a href="http://www.poon-world.com">here</a> to switch on the red light.\n"; 

No hace falta decir que ya probé las diversas opciones de propiedades de Vista de Texto - pero no parecen hacer mucha diferencia a menos que me haya perdido algo. En algunos casos, la URL está codificada en el texto, en color azul y se puede hacer clic, en otros puedo ver el formato HTML. En otros, de nuevo, está codificado por colores y la URL parece estar codificada en el texto de alguna manera, pero no ocurre nada cuando hago clic en ella. En cuanto a la incrustación de URL, a diferencia del otro ejemplo con formato HTML "simple", ni siquiera pude averiguar una regla hasta el momento de cuándo funciona y cuándo no. ¿Puede alguien ayudarme para desatar los nudos en mi cabeza ..

+0

intente esto MAC

Respuesta

5

En realidad, desde el Docs Android ..

public final void setText (CharSequence text) 

Establece el valor de la cadena de la Vista de Texto. TextView no acepta el formato similar al HTML, que puede hacer con cadenas de texto en archivos de recursos XML. Para darle un estilo a sus cadenas, adjunte los objetos android.text.style. * A SpannableString, o consulte la documentación de Tipos de recursos disponibles para ver un ejemplo de cómo configurar el texto formateado en el archivo de recursos XML.

Pero,

public final void setText (int resid) 
  • no más especificaciones sobre ella ..

Pero a partir de documentos Android recurso de cadena ..

Puede agregar estilo a sus cadenas con el formato HTML . Por ejemplo:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <string name="welcome">Welcome to <b>Android</b>!</string> 
</resources> 

elementos HTML soportados incluyen:

<b> for bold text. 
<i> for italic text. 
<u> for underline text. 

A veces es posible que desee crear un recurso de texto con estilo que también se utiliza como una cadena de formato.Normalmente, esto no funcionará porque el método String.format(String, Object...) quitará toda la información de estilo de la cadena. La solución a esto es escribir las etiquetas HTML con entidades escapadas, que luego se recuperan con fromHtml(String), una vez que se haya formateado.

Y sobre su cadena de URL, ...

tvMyTextView.setText(Html.fromHtml("Click <a href="http://www.poon-world.com">here</a> to switch on the red light.\n")); 

Busque también en esta cuestión de forma Set TextView text from html-formatted string resource in XML

y

Android String Resource

0

Para añadir algunas notas a mis propias preguntas y después de haber recibido las respuestas hasta ahora, solo puedo concluir que no parece haber una manera confiable que funcione en todas partes.

En algunos casos, según mi experiencia, si una URL formateada es parte del texto plano y no está encerrada por etiquetas (como http://www.poon-world.com, incluso solo "Poon-World.com" parece funcionar en la mayoría de los casos), simplemente configurar las propiedades de TextView parece ser suficiente y se hará clic en los enlaces. Sin embargo, si los enlaces están incrustados en etiquetas HTML y se supone que se puede hacer clic en algún texto de enlace, no parece haber otra manera que ir con Html.fromHtml (..).

Pero también hay algunos casos especiales que no puedo explicar: en algunas actividades/diseños, estoy usando URL "incrustadas" y he establecido las propiedades de clic mencionadas anteriormente, no utilizo Html.fromHtml .. y sorpresa !, un clic en los enlaces de hecho creadas en el texto de hecho abre el navegador, pero sólo después de haber añadido la siguiente línea en el código en el OnCreate-Evento:

myTextView.setMovementMethod(LinkMovementMethod.getInstance()); 

(me encontré con este truco en otro hilo, gracias al autor) No tengo idea de por qué, parece ser la forma en que los recursos de cadena son analizados y evaluados por Android. Acabo de mencionar que, además de todo, ya se ha dicho, para que todos los que buscan soluciones y se confundan no empiecen a pensar que está perdiendo la cabeza: no, solo evalúen los enfoques mencionados aquí en esta página y uno debería hacerlo normalmente. rutina de ejercicio.