HTML in string resource?
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>
Set TextView text from html-formatted string resource in XML
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... ]]>
Edge Cases:
- Characters like apostrophe ('), double-quote ("), and ampersand (&) only need to be escaped if you want them to appear in the rendered text AS themselves, but they COULD be plausibly interpreted as HTML.
'
and"
can be represented as\'
and\"
, or'
and"
.<
and>
always need to be escaped as<
and>
if you literally want them to render as '<' and '>' in the text.- Ampersand (&) is a little more complicated.
- Ampersand followed by whitespace renders as ampersand.
- Ampersand followed by one or more characters that don't form a valid HTML entity code render as Ampersand followed by those characters. So...
&qqq;
renders as&qqq;
, but<1
renders as<1
.
Example:
<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 from the same \'string\'.</p>
<p>To be clear, 0 < 1, & 10 > 1<p>
]]>
</string>
Then, in your code:
TextView foo = (TextView)findViewById(R.id.foo);
foo.setText(Html.fromHtml(getString(R.string.nice_html), FROM_HTML_MODE_LEGACY));
IMHO, this is several orders of magnitude nicer to work with :-)
August 2021 update: My original answer used Html.fromHtml(String), which was deprecated in API 24. The alternative fromHtml(String,int) form is suggested as its replacement.
FROM_HTML_MODE_LEGACY is likely to work... but one of the other flags might be a better choice for what you want to do.
On a final note, if you'd prefer to render Android Spanned text suitable for use in a TextView using Markdown syntax instead of HTML, there are now multiple thirdparty libraries to make it easy including https://noties.io/Markwon.
Strings.xml equivalent in HTML
I have found the Angular translate library to be both extremely powerful and easy to use. I've yet to come up with a use case that it cannot actually handle natively.
android string.xml reading html tags problem
Use XML CDATA
<string name="demoStr"><Data><![CDATA[ <b>ABC</b> ]]> </Data></string>
getString() will be got "<b>ABC</b>"
How to display HTML in TextView?
You need to use Html.fromHtml()
to use HTML in your XML Strings. Simply referencing a String with HTML in your layout XML will not work.
This is what you should do in Java
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
textView.setText(Html.fromHtml("<h2>Title</h2><br><p>Description here</p>", Html.FROM_HTML_MODE_COMPACT));
} else {
textView.setText(Html.fromHtml("<h2>Title</h2><br><p>Description here</p>"));
}
And in Kotlin:
textView.text = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
Html.fromHtml(html, Html.FROM_HTML_MODE_COMPACT)
} else {
Html.fromHtml(html)
}
Related Topics
How to Make My Layout Able to Scroll Down
How to Show a Mediacontroller While Playing Audio in Android
How to Avoid Scientific Notation in Double
Widgets Don't Respond When Re-Added Through Code
How to Know the Calling Activity in Android
Android: Listview.Getscrolly() - Does It Work
How Surfaceholder Callbacks Are Related to Activity Lifecycle
Onitemclicklistener and Onclicklistener Not Working for Listview
How to Apply Custom CSS to Android Webview When Url Is from Internet Server
Eclipse Can't Find Android.Support.V4.Widget.Swiperefreshlayout
Using Videoview for Streaming or Progressive-Download Video
Is There a Faster Way to Decode HTML Characters to a String Than HTML.Fromhtml()
Pcm -> Aac (Encoder) -> Pcm(Decoder) in Real-Time with Correct Optimization
How to Override a Module/Dependency in a Unit Test with Dagger 2.0
Set Rowspan or Colspan of a Child of a Gridlayout Programmatically