美文网首页
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