Android:在string,SpannedStrings和Spannablestrings之间转换

我有一个名为“foo”的string资源。 它可能是一个简单的string…或者它可能包含HTML。 这可能会随着时间的推移而变化:我应该能够立即将它作为至less一个SpannableString装箱,在读取它是否是HTML时( 但是如何?

我想得到那个原始的CharSequence,并且首先能够按原样显示它(确切的字符,而不是Android的“解释”)。 现在我不能这样做… toString()决定撕掉它不认为我想看到的部分。

然后,我希望能够通过使用某种方法(普通的方法都不起作用)通过串联从这个和其他string或SpannableStrings创build一个SpannableString。 然后,我想使用SpannableString在TextView中显示HTML格式的文本。

这不应该是困难的,但显然我没有做正确的(关于这个我迄今发现的有很less的信息)。 当然,在Strings,SpannedStrings,甚至Spannablestrings之间,还有一种方法可以准确地相互转换,而不会丢失一路上的标记。

请注意,我已经玩弄了Linkify,但是我希望能够更好的控制这个过程(没有格式化的“/”,适当的hrefs等)。如果我一直留在HTML中步骤,但我不能连接任何东西。

编辑1:我学会了我可以使用以下来始终确保我得到我的原始string(而不是Android决定它认为CharSequence真的是)。 尼斯…现在,如何哄成这个SpannableString?

<string name="foo"><![CDATA[ <b>Some bold</b> ]]> </string> 

编辑2:不知道为什么这不起作用,但是…如果foo1和foo2是上面标记的string(如CDATA),那么显然可以这样做:

 String foo1 = (String)getResources().getText(R.string.foo1); String foo2 = (String)getResources().getText(R.string.foo2); SpannedString bar = new SpannedString(Html.fromHtml(foo1+foo2)); 

好奇:有没有比这更简单的解决scheme? 这个CDATA业务是否真的有必要? 它似乎令人费解(但不像从来不知道什么资源types将是… String,Spannable等)

Solutions Collecting From Web of "Android:在string,SpannedStrings和Spannablestrings之间转换"

看起来没有一个更直接的方法来实现这一点。

我有同样的问题。 根据Google API指南有两种解决scheme。

首先是逃避< mark with &lt; 在string资源中。 不幸的是, String转换会在后台删除标签。

其次是使用格式string而不是XML / HTML标签。 看起来更简单,更快,并避开隐藏的转换问题。 getString(resource, ...) printf(string, ...)在这里像printf(string, ...)

这两个工作,并需要一些代码来replacestring的任何部分(处理标签或格式string)。 请享用! =)