I have some fixed strings inside my
strings.xml, something like:
<resources> <string name="somestring"> <B>Title</B><BR/> Content </string> </resources>
and in my layout I've got a
TextView which I'd like to fill with the html-formatted string.
<TextView android:id="@+id/formattedtext" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/htmlstring"/>
if I do this, the content of
formattedtext is just the content of
somestring stripped of any html tags and thus unformatted.
I know that it is possible to set the formatted text programmatically with
because I use this in other parts of my program where it is working as expected.
To call this function I need an
Activity, but at the moment my layout is just a simple more or less static view in plain XML and I'd prefer to leave it that way, to save me from the overhead of creating an
Activity just to set some text.
Am I overlooking something obvious? Is it not possible at all? Any help or workarounds welcome!
Edit: Just tried some things and it seems that HTML formatting in xml has some restraints:
tags must be written lowercase
some tags which are mentioned here do not work, e.g.
<br/> (it's possible to use
Just in case anybody finds this, there's a nicer alternative that's not documented (I tripped over it after searching for hours, and finally found it in the bug list for the Android SDK itself). You CAN include raw HTML in strings.xml, as long as you wrap it in
<![CDATA[ ...raw html... ]]>
<string name="nice_html"> <![CDATA[ <p>This is a html-formatted string with <b>bold</b> and <i>italic</i> text</p> <p>This is another paragraph of the same string.</p> ]]> </string>
Then, in your code:
TextView foo = (TextView)findViewById(R.id.foo); foo.setText(Html.fromHtml(getString(R.string.nice_html)));
IMHO, this is several orders of magnitude nicer to work with :-)
As the top answer here is suggesting something wrong (or at least too complicated), I feel this should be updated, although the question is quite old:
When using String resources in Android, you just have to call
getString(...) from Java code or use
android:text="@string/..." in your layout XML.
Even if you want to use HTML markup in your Strings, you don't have to change a lot:
The only characters that you need to escape in your String resources are:
That means you can add your HTML markup without escaping the tags:
<string name="my_string"><b>Hello World!</b> This is an example.</string>
However, to be sure, you should only use
<u> as they are listed in the documentation.
If you want to use your HTML strings from XML, just keep on using
android:text="@string/...", it will work fine.
The only difference is that, if you want to use your HTML strings from Java code, you have to use
getText(...) instead of
getString(...) now, as the former keeps the style and the latter will just strip it off.
It's as easy as that. No CDATA, no
You will only need
Html.fromHtml(...) if you did encode your special characters in HTML markup. Use it with
getString(...) then. This can be necessary if you want to pass the String to
This is all described in the docs as well.
There is no difference between
getText(...) with unescaped HTML (as I've proposed) or
CDATA sections and
See the following graphic for a comparison: