在R.string 中添加了一个带html标签的文字,通过Context.getString(R.string.xx). 打印结果 html标签被过滤掉了。
搜索关键词的时候没有用对关键词(例如:html标签在 R.string中的使用),好几个小时没有找到解决方法。
印象中这个问题在一前的开发中遇到过,并且解决过。 由于当时没有记录,所以走了好多弯路。
在此记录一下 html标签在 R.string 文件中的使用方法:
1 使用 <![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)));
2 使用转义html标签
能够直接使用的标签比较有限,若要实现其他效果,如改变字体颜色或者大小等,可使用转义html标签,或者上面所述的CDDATA方法;
简单了解下转义标签,首先,定义转义字符串的原因有两个:
第一个原因是像“<”和“>”这类符号已经用来表示HTML标签,因此就不能直接当作文本中的符号来使用。
第二个原因是,有些字符在ASCII字符集中没有定义,因此需要使用转义字符串来表示。
例如:< 转义为 < > 转义为 > 空格 转义为 等等。。。其他可百度"html转义字符"
例如
<string name="hello_world01"><b>Hello world!</b></string>
Then, in your code:
TextView tvBold = (TextView) findViewById(R.id.tv01);
tvBold.setText(Html.fromHtml(getString(R.string.hello_world01)));
3 格式化替换(占位符)
对于静态字符串中,某些一个或者多个地方可能是需要动态获取的,此时可使用此方法,免去了添加多个TextView的麻烦
例如
<string name="textTest">Tom%1$s就要%2$d岁了</string>
其中,s表示字符串类型,d表示数字类型...其他还有浮点型等并且可以设置显示格式,比如保留几位小数等。。
Then, in your code:
TextView tvTest= (TextView) findViewById(R.id.tv_test);
tvTest.setText(String.format(getString(R.string.textTest), "明年",12));
网友评论