Tengo algunas cadenas fijas dentro de mi strings.xml
, algo así como:
<resources>
<string name="somestring">
<B>Title</B><BR/>
Content
</string>
</resources>
y en mi diseño tengo uno TextView
que me gustaría llenar con la cadena con formato html.
<TextView android:id="@+id/formattedtext"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/htmlstring"/>
si hago esto, el contenido de formattedtext
es solo el contenido somestring
despojado de cualquier etiqueta html y, por lo tanto, sin formato.
Sé que es posible configurar el texto formateado mediante programación con
.setText(Html.fromHtml(somestring));
porque lo uso en otras partes de mi programa donde funciona como se esperaba.
Para llamar a esta función, necesito una Activity
, pero en este momento mi diseño es simplemente una vista más o menos estática en XML simple y prefiero dejarlo así, para salvarme de la sobrecarga de crear un Activity
solo para establecer algunos texto.
¿Estoy pasando por alto algo obvio? ¿No es posible en absoluto? Cualquier ayuda o soluciones son bienvenidas!
Editar: Acabo de probar algunas cosas y parece que el formato HTML en xml tiene algunas restricciones:
las etiquetas deben escribirse en minúsculas
algunas etiquetas que se mencionan aquí no funcionan, por ejemplo
<br/>
(es posible usar\n
en su lugar)
fuente
Respuestas:
En caso de que alguien encuentre esto, hay una alternativa mejor que no está documentada (me tropecé después de buscar durante horas y finalmente la encontré en la lista de errores para el SDK de Android). Usted PUEDE incluir HTML puro en strings.xml, siempre y cuando se envuelve en
Ejemplo:
Luego, en tu código:
En mi humilde opinión, es mejor trabajar con varios órdenes de magnitud :-)
fuente
Html.fromHtml(getString(R.string.nice_html))
bit? :)Como la respuesta principal aquí sugiere algo incorrecto (o al menos demasiado complicado), creo que esto debería actualizarse, aunque la pregunta es bastante antigua:
Al usar los recursos de String en Android, solo tiene que llamar
getString(...)
desde un código Java o usarloandroid:text="@string/..."
en su diseño XML.Incluso si desea utilizar el marcado HTML en sus cadenas, no tiene que cambiar mucho:
Los únicos personajes que necesita para escapar en sus recursos de cadena son:
"
convierte\"
'
convierte\'
&
convierte&
o&
Eso significa que puede agregar su marcado HTML sin escapar de las etiquetas:
Sin embargo, para estar seguro, solo debe usar
<b>
,<i>
y<u>
como se enumeran en la documentación.Si desea utilizar sus cadenas HTML a partir de XML , sólo seguir utilizando
android:text="@string/..."
, no tendrán ningún problema.La única diferencia es que, si desea usar sus cadenas HTML del código Java , debe usarlas en
getText(...)
lugar degetString(...)
ahora, ya que la primera mantiene el estilo y la segunda simplemente se la quitará.Es tan fácil como eso. No CDATA, no
Html.fromHtml(...)
.Sólo necesitará
Html.fromHtml(...)
si lo hizo codificar sus caracteres especiales en HTML marcado. Úselo congetString(...)
entonces. Esto puede ser necesario si desea pasar la Cadena aString.format(...)
.Todo esto también se describe en los documentos .
Editar:
No hay diferencia entre
getText(...)
HTML sin escapes (como he propuesto) oCDATA
secciones yHtml.fromHtml(...)
.Vea el siguiente gráfico para una comparación:
fuente
getResources().getText(R.string.codename)
<b>
,<i>
,<u>
. Otras etiquetas no siempre son compatibles.Escape sus etiquetas HTML ...
fuente
TextView
que muestre HTML?fromHTML()
.Html.fromHTML()
, debe codificar los caracteres especiales. ¡Extraño!Android no tiene una especificación para indicar el tipo de cadena de recursos (por ejemplo, texto / sin formato o texto / html). Sin embargo, existe una solución alternativa que permitirá al desarrollador especificar esto dentro del archivo XML.
Una vez que los defina, puede expresarse con HTML en archivos xml sin tener que volver a llamar a setText (Html.fromHtml (...)). Estoy bastante sorprendido de que este enfoque no sea parte de la API.
Esta solución funciona en la medida en que el simulador de estudio de Android mostrará el texto como HTML renderizado.
res / values / strings.xml (el recurso de cadena como HTML)
layout.xml (solo las partes relevantes)
Declare el espacio de nombres del atributo personalizado y agregue el atributo android_ex: isHtml. Utilice también la subclase de TextView.
res / values / attrs.xml (define los atributos personalizados para la subclase)
TextViewEx.java (la subclase de TextView)
fuente
Última actualización:
Html.fromHtml(string);
// en desuso después de las versiones de Android N ..El siguiente código da soporte a Android N y versiones superiores ...
fuente
fuente
Tengo otro caso cuando no tengo oportunidad de poner CDATA en el xml cuando recibo la cadena HTML de un servidor.
Esto es lo que obtengo de un servidor:
Parece ser más complicado pero la solución es mucho más simple.
¡Espero eso ayude!
Linh
fuente