2011-01-09 19 views
41

En strings.xml archivo de proyecto Android que he siguientes texto HTMLstring.xml androide etiquetas html lectura de problemas

<?xml version="1.0" encoding="utf-8"?> 

<resources> 

<string name="myHeadStr"><b><u>bold, underline </u></b></string> 
... 

</resources> 

Cuando leí esto en getString (R.string.myHeadStr) se da solamente el texto "negrita, underline" se olvida de las etiquetas hTML y ....

Cómo leer cadena completa con las etiquetas hTML de string.xml

Respuesta

102

uso de XML CDATA

<string name="demoStr"><Data><![CDATA[ <b>ABC</b> ]]> </Data></string> 

getString() se obtuvo "<b>ABC</b>"

+0

se le pasa el cierre> después de " philipp

+2

Esta debería haber sido la respuesta correcta. –

+2

esta es la forma correcta de hacerlo. +1 –

29

Reemplazar < con & lt;

<string name="myHeadStr">&lt;b>&lt;u>bold, underline &lt;/u>&lt;/b></string> 

Entonces, cuando se recuperan:

Html.fromHtml(getResources().getString(R.string.myHeadStr)); 

Ésta es la forma prescrita de hacer en la documentación androide. Lea el párrafo titulado: "Styling con el formato HTML" en este enlace: http://developer.android.com/guide/topics/resources/string-resource.html

+2

Cuando lo uso imprime datos a lo largo de la etiqueta como formato no html –

+0

funciona bien gracias. –

+0

@Sarwar Erfan: imprime la etiqueta pero en realidad no diseña la cadena, ¿o sí? – Silentbang

1

me he encontrado el mismo problema al tratar de almacenar una htmlpage completa en mis rescources. I finaly resolvieron el problema cambiando tres cosas:

  1. el nodo "cadena" tiene que haber establecido el atributo "formateado" para falsa.
  2. la página html almacenada debe estar envuelta en un nodo CData.
  3. la página html es ¡NO con apóstrofes!

El último en realidad era mi problema principal. Así que aquí está mi strings.xml que contiene la página html "correctamente" almacenada.

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <string name="error_html" formatted="false" ><![CDATA[<html><head><link name="icon1" href="favicon.ico" rel="SHORTCUT ICON" /><title>Error</title><style>html, body {margin: 0;padding: 0;background: #3f0000;color: white;font-family: Arial;}#MainLink {position: relative;background: #7f0000;margin: 10px;text-decoration: none;border: 1px solid #9f0000;-webkit-border-radius: 10px;-moz-border-radius: 10px;border-radius: 10px;-webkit-box-shadow: 5px 5px 5px 0px rgba(0,0,0,0.5);-moz-box-shadow: 5px 5px 5px 0px rgba(0,0,0,0.5);box-shadow: 5px 5px 5px 0px rgba(0,0,0,0.5);}#MainLink {width: 462px;height: 220px;}#MainLink td {font-size: 20px;}#MainLink span {text-decoration: underline;font-weight: bold;font-size: 40px;}</style></head><body><table width="100%" height="100%" cellpadding="0" cellspacing="0"><tr><td align="center" valign="middle"><table cellpadding="0" cellspacing="0"><tr><td colspan="2" id="MainLink" align="center"><big><big><b>Error</b></big></big></td></tr></table></td></tr></table></body></html>]]></string> 
</resources> 
+1

Buena respuesta. Solo una cosa: puede tener apóstrofes, solo necesita escapar de ellos con un \: ** \ '** Los usé porque necesitaba almacenar javascript en strings.xml. – danielnovais92

0

pasando directamente el identificador de recurso de cadena a setText() o el uso de Context.getText() sin Html.fromHtml() que funciona correctamente, pero que pasa en el resultado de Context.getString() no.

ejemplo:

strings.xml:

<resources> <string name="html">This is <b>bold</b> and this is <i>italic</i>.</string> <resources>

código en Activity.java archivo:

textView.setText(R.string.html); // this will properly format the text textView.setText(getText(R.string.html)); // this will properly format the text textView.setText(getString(R.string.html)); // this will ignore the formatting tags