连接字符串资源而不会丢失HTML格式

时间:2011-11-10 06:40:43

标签: java android string-formatting

我需要将HTML格式的文本(简单的东西,只有少量<b>/</b><i>/</i>标记)放入TextView。 我需要组合这三种不同的文本行,每行都存储在字符串资源中,如下面的代码。

(TextView) newText.setText(getString(R.string.textstr1) + getString(R.string.textstr2) + getString(R.string.textstr3));

它不起作用,因为将它们连接起来会删除HTML格式。

我尝试使用getText()而不是getString()和CharSequence.append()来解决它,但这也会删除HTML。我使用HTML.fromHTML()尝试了各种选项,但它们都没有用。 Android Developer提供了这种粗略的方法,你必须使用转义的HTML(&lt; b&gt;变成&amp; lt; b&gt;等等),但这需要重新格式化我的所有字符串资源,并将我视为一个kludge。

有没有人知道我想要做的更好的方法吗?

3 个答案:

答案 0 :(得分:2)

方法getString消除了HTML标记,但有两个技巧可用:

  1. 使用&amp; LT;和&amp; GT;而不是&lt;和&gt;。这样可以防止getString将标签剪切掉,并且仍然允许Html.fromHtml()解析它们。
  2. 示例:

    <string name="text">This is &lt;i&gt;italic&lt;/i&gt;</string>
    
    1. 使用CDATA将所有字符串换行为HTML标记。
    2. 示例:

      <string name="text"><![CDATA[This is <i>italic</i>]]></string>
      

      在这两种情况下,您接下来要做的只是setText。

      yourTextView.setText(Html.fromHtml(getString(R.string.text)));
      

      如果您想要更多示例,请查看: http://android4beginners.com/2013/07/lesson-1-5-how-to-color-part-of-the-text-and-use-alpha-channel-in-textview/(strings.xml中的字体颜色HTML标记)

答案 1 :(得分:0)

试试这个,希望它会有所帮助..

String newString=getString(R.string.textstr1) + getString(R.string.textstr2) + getString(R.string.textstr3);

newText.setText(Html.fromHtml(newString));

答案 2 :(得分:0)

(TextView) newText.setTextHtml.fromHtml((getString(R.string.textstr1) + getString(R.string.textstr2) + getString(R.string.textstr3)));