我知道我可以将转义的HTML标记放在字符串资源中。但是,查看Contacts应用程序的源代码,我可以看到它们有一种不必对HTML进行编码的方法。来自联系人应用程序strings.xml的报价
<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
中看到这一点)。为什么会这样呢?我怎样才能得到原始的字符串,以及标签和所有的东西?联系人应用程序是如何做到这一点的?
发布于 2011-10-04 06:02:51
你也可以把你的超文本标记语言放在一个CDATA
块中,getString()
将返回你实际的超文本标记语言。如下所示:
<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(...)
调用来获取可生成的文本。
发布于 2011-11-09 21:01:12
最好的解决方案是以某种方式使用资源:
<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>
然后用以下命令显示它:
Spanned sp = Html.fromHtml( getString(R.string.htmlsource));
tv.setText(sp);
尝试在不使用<![CDATA[ ]]>
和使用tv.setText(getText(R.string.htmlsource));
的情况下使用该资源,您将看到不同之处。
发布于 2020-03-05 09:46:26
我知道这是一个古老的问题,但似乎还没有提出最有效的答案。
只需使用HTML-escaped
字符,这样getString
就不会处理它,但它将由HtmlCompact.fromHtml
(或较旧的Html.fromHtml
)处理。
这也支持更多的标签,如超文本标记语言链接等,而不仅仅是像getString
方法那样的格式化。
例如,下面这样的代码应该是有效的:
<string name="html_message">Hello <b>World</b>.</string>
val text = getString(R.string.html_message)
val result = HtmlCompact.fromHtml(text, HtmlCompat.FROM_HTML_MODE_LEGACY)
在您的示例中,使用<
替换<
,如下所示:
<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>
https://stackoverflow.com/questions/2667319
复制相似问题