HTML in string resource?
I know I can put escaped HTML tags in string resources. However, looking at the source code for the Contacts application I can see that they have a way of not having to encode the HTML. Quote from the Contacts application 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>
Unfortunately, when I try something similar (like Hello, <b>World</b>!
), getString()
returns the string without the tags (I can see that in logcat
). Why is that? How can I get the original string, with tags and everything? How is the Contacts application doing it?
Solution 1:
You can also surround your html in a CDATA
block as well and getString()
will return your actual HTML. Like such:
<string name="foo"><![CDATA[Foo Bar <a href="foo?id=%s">baz</a> is cool]]></string>
Now when you perform a getString(R.string.foo)
the string will be HTML. If you need to render the HTML (with the link as shown) via a clickable TextView
you'd need to perform a Html.fromHtml(...)
call to get the spannable text.
Solution 2:
It seems getString()
does just that -- gets a string. To use this, you have to use getText()
(and no more Html.fromHtml()
), i.e.:
mTextView.setText(getText(R.string.my_styled_text));
However, it seems the android:text
property does just the same thing, and the following is equivalent:
<TextView android:text="@string/my_styled_text" />
And in strings.xml
:
<string name="my_styled_text">Hello, <b>World</b>!</string>
Solution 3:
The best solution is to use resources in a way:
<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>
and than display it with:
Spanned sp = Html.fromHtml( getString(R.string.htmlsource));
tv.setText(sp);
Try to use that resource without <![CDATA[ ]]>
and with tv.setText(getText(R.string.htmlsource));
and you will see the difference.