studio programacion móviles fromhtml example desarrollo curso aplicaciones android

android - programacion - HTML en el recurso de cadena?



html string android (5)

Idea: coloque el HTML en archivos con formato JSON y guárdelos en / res / raw. (JSON es menos quisquilloso)

Almacene los registros de datos como este en un objeto de matriz:

[ { "Field1": "String data", "Field2": 12345, "Field3": "more Strings", "Field4": true }, { "Field1": "String data", "Field2": 12345, "Field3": "more Strings", "Field4": true }, { "Field1": "String data", "Field2": 12345, "Field3": "more Strings", "Field4": true } ]

Para leer los datos en su aplicación:

private ArrayList<Data> getData(String filename) { ArrayList<Data> dataArray = new ArrayList<Data>(); try { int id = getResources().getIdentifier(filename, "raw", getPackageName()); InputStream input = getResources().openRawResource(id); int size = input.available(); byte[] buffer = new byte[size]; input.read(buffer); String text = new String(buffer); Gson gson = new Gson(); Type dataType = new TypeToken<List<Map<String, Object>>>() {}.getType(); List<Map<String, Object>> natural = gson.fromJson(text, dataType); // now cycle through each object and gather the data from each field for(Map<String, Object> json : natural) { final Data ad = new Data(json.get("Field1"), json.get("Field2"), json.get("Field3"), json.get("Field4")); dataArray.add(ad); } } catch (Exception e) { e.printStackTrace(); } return dataArray; }

Finalmente, la clase Data es solo un contenedor de variables públicas para facilitar el acceso ...

public class Data { public String string; public Integer number; public String somestring; public Integer site; public boolean logical; public Data(String string, Integer number, String somestring, boolean logical) { this.string = string; this.number = number; this.somestring = somestring; this.logical = logical; } }

Sé que puedo poner etiquetas HTML escapadas en recursos de cadenas. Sin embargo, al mirar el código fuente de la aplicación Contactos, veo que tienen una forma de no tener que codificar el HTML. Cita de la aplicación Contactos strings.xml :

<string name="contactsSyncPlug"><font fgcolor="#ffffffff">Sync your Google contacts!</font> /nAfter syncing to your phone, your contacts will be available to you wherever you go.</string>

Desafortunadamente, cuando intento algo similar (como Hello, <b>World</b>! ), getString() devuelve la cadena sin las etiquetas (puedo verlo en logcat ). ¿Porqué es eso? ¿Cómo puedo obtener la cadena original, con etiquetas y todo? ¿Cómo lo está haciendo la aplicación Contactos?


La mejor solución es usar los recursos de una manera:

<string name="htmlsource"><![CDATA[<p>Adults are spotted gold and black on the crown, back and wings. Their face and neck are black with a white border; they have a black breast and a dark rump. The legs are black.</p><p>It is similar to two other golden plovers, Eurasian and Pacific. <h1>The American Golden Plover</h1> is smaller, slimmer and relatively longer-legged than Eurasian Golden Plover (<i>Pluvialis apricaria</i>) which also has white axillary (armpit) feathers. It is more similar to Pacific Golden Plover (<i>Pluvialis fulva</i>) with which it was once <b>considered</b> conspecific under the name /"Lesser Golden Plover/". The Pacific Golden Plover is slimmer than the American species, has a shorter primary projection, and longer legs, and is usually yellower on the back.</p><p>These birds forage for food on tundra, fields, beaches and tidal flats, usually by sight. They eat insects and crustaceans, also berries.</p>]]></string>

y que mostrarlo con:

Spanned sp = Html.fromHtml( getString(R.string.htmlsource)); tv.setText(sp);

Intenta usar ese recurso sin y con tv.setText (getText (R.string.htmlsource)); y verás la diferencia.


Parece que getString() hace precisamente eso: obtiene una cadena . Para usar esto, debes usar getText() (y no más Html.fromHtml() ), es decir:

mTextView.setText(getText(R.string.my_styled_text));

Sin embargo, parece que la propiedad android:text hace exactamente lo mismo, y lo siguiente es equivalente:

<TextView android:text="@string/my_styled_text" />

Y en strings.xml :

<string name="my_styled_text">Hello, <b>World</b>!</string>


También puede rodear su html en un bloque CDATA y getString devolverá su HTML real. Como tal:

<string name="foo"><![CDATA[Foo Bar <a href="foo?id=%s">baz</a> is cool]]></string>

Ahora cuando ejecuta getString (R.string.foo), la cadena será HTML. Si necesita renderizar el HTML (con el enlace como se muestra) a través de un TextView en el que se puede hacer clic, deberá realizar una llamada Html.fromHtml (...) para obtener el texto interactivo.


funciona para mí sin bloque CDATA.

<string name="menu_item_purchase" translatable="false"><font color="red">P</font><font color="orange">r</font><font color="yellow">e</font><font color="green">m</font><font color="white">i</font><font color="blue">u</font><font color="purple">m</font></string>`enter code here`

Lo uso en el diseño.

<item android:id="@+id/nav_premium" android:icon="@drawable/coins" android:title="@string/menu_item_purchase" />