Android:在字符串,SpannedStrings和Spannablestrings之间进行转换

Mar*_*ver 22 string resources android textview

我有一个名为"foo"的字符串资源.它可能是一个简单的字符串......或者它可能包含HTML.这可能会随着时间的推移而改变:我应该能够在读取它是否为HTML时立即将其设置为至少一个SpannableString(但是如何?)

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

然后,我希望能够通过使用某种方法(没有正常的方法工作)通过串联从此和其他字符串或SpannableStrings创建SpannableString.我想使用SpannableString在TextView中显示HTML格式的文本.

这应该不难,但显然我做得不对(到目前为止我发现的关于此的信息很少).当然有一种方法可以在Strings,SpannedStrings甚至Spannablestrings之间准确地进行转换,而不会丢失沿途的标记?

请注意,我已经玩过一些有点破碎的Linkify,但是我想要更好地控制这个过程(没有悬挂的未格式化的"/",正确的hrefs等)我可以让这一切都工作如果我依旧保持HTML步骤,虽然我无法连接任何东西.

编辑1:我已经知道我可以使用以下内容来始终确保我得到我的原始字符串(而不是Android决定它认为CharSequence真的是什么).很好......现在,如何将其引入SpannableString?

<string name="foo"><![CDATA[
    <b>Some bold</b>
]]>
</string>
Run Code Online (Sandbox Code Playgroud)

编辑2:不确定为什么这不能提前工作,但是......如果foo1和foo2是上面标记的字符串(如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));
Run Code Online (Sandbox Code Playgroud)

好奇:有没有比这更简单的解决方案?这个CDATA业务真的有必要吗?这似乎是错综复杂的(但并不像从未完全知道什么是资源类型那样复杂......字符串,跨越等等)

Mar*_*ver 0

似乎没有更直接的方法来实现这一点。