首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >字符串资源中的HTML?

字符串资源中的HTML?
EN

Stack Overflow用户
提问于 2010-04-19 20:26:26
回答 5查看 89.7K关注 0票数 127

我知道我可以将转义的HTML标记放在字符串资源中。但是,查看Contacts应用程序的源代码,我可以看到它们有一种不必对HTML进行编码的方法。来自联系人应用程序strings.xml的报价

代码语言:javascript
复制
<string name="contactsSyncPlug"><font fgcolor="#ffffffff">Sync your Google contacts!</font> 
\nAfter syncing to your phone, your contacts will be available to you wherever you go.</string>

不幸的是,当我尝试类似的操作(比如Hello, <b>World</b>!)时,getString()返回没有标签的字符串(我可以在logcat中看到这一点)。为什么会这样呢?我怎样才能得到原始的字符串,以及标签和所有的东西?联系人应用程序是如何做到这一点的?

EN

回答 5

Stack Overflow用户

发布于 2011-10-04 06:02:51

你也可以把你的超文本标记语言放在一个CDATA块中,getString()将返回你实际的超文本标记语言。如下所示:

代码语言:javascript
复制
<string name="foo"><![CDATA[Foo Bar <a href="foo?id=%s">baz</a> is cool]]></string>

现在,当您执行getString(R.string.foo)时,字符串将是HTML。如果需要通过可单击的TextView呈现HTML (链接如图所示),则需要执行Html.fromHtml(...)调用来获取可生成的文本。

票数 213
EN

Stack Overflow用户

发布于 2011-11-09 21:01:12

最好的解决方案是以某种方式使用资源:

代码语言:javascript
复制
<string name="htmlsource"><![CDATA[<p>Adults are spotted gold and black on the crown, back and wings. Their face and neck are black with a white border; they have a black breast and a dark rump. The legs are black.</p><p>It is similar to two other golden plovers, Eurasian and Pacific. <h1>The American Golden Plover</h1> is smaller, slimmer and relatively longer-legged than Eurasian Golden Plover (<i>Pluvialis apricaria</i>) which also has white axillary (armpit) feathers. It is more similar to Pacific Golden Plover (<i>Pluvialis fulva</i>) with which it was once <b>considered</b> conspecific under the name \"Lesser Golden Plover\". The Pacific Golden Plover is slimmer than the American species, has a shorter primary projection, and longer legs, and is usually yellower on the back.</p><p>These birds forage for food on tundra, fields, beaches and tidal flats, usually by sight. They eat insects and crustaceans, also berries.</p>]]></string>

然后用以下命令显示它:

代码语言:javascript
复制
Spanned sp = Html.fromHtml( getString(R.string.htmlsource));
tv.setText(sp);

尝试在不使用<![CDATA[ ]]>和使用tv.setText(getText(R.string.htmlsource));的情况下使用该资源,您将看到不同之处。

票数 57
EN

Stack Overflow用户

发布于 2020-03-05 09:46:26

我知道这是一个古老的问题,但似乎还没有提出最有效的答案。

只需使用HTML-escaped字符,这样getString就不会处理它,但它将由HtmlCompact.fromHtml (或较旧的Html.fromHtml)处理。

这也支持更多的标签,如超文本标记语言链接等,而不仅仅是像getString方法那样的格式化。

例如,下面这样的代码应该是有效的:

代码语言:javascript
复制
<string name="html_message">Hello &lt;b>World&lt;/b>.</string>

val text = getString(R.string.html_message)
val result = HtmlCompact.fromHtml(text, HtmlCompat.FROM_HTML_MODE_LEGACY)

在您的示例中,使用&lt;替换<,如下所示:

代码语言:javascript
复制
<string name="contactsSyncPlug">&lt;font fgcolor="#ffffffff">Sync your Google contacts!&lt;/font> \nAfter syncing to your phone, your contacts will be available to you wherever you go.</string>
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2667319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档