美文网首页
Android String资源遇到的问题

Android String资源遇到的问题

作者: 简单快乐6 | 来源:发表于2020-04-17 15:15 被阅读0次

在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字符集中没有定义,因此需要使用转义字符串来表示。

例如:< 转义为 &lt;   > 转义为 &gt;   空格 转义为 &nbsp; 等等。。。其他可百度"html转义字符"

例如

<string name="hello_world01">&lt;b>Hello world!&lt;/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));

相关文章

网友评论

      本文标题:Android String资源遇到的问题

      本文链接:https://www.haomeiwen.com/subject/crcuaxtx.html