5

我对 TextView 元素何时以格式化形式显示文本的“规则”有点困惑。

像一个字符串

"There are <i>different ways</i> of coding.\n";

在我编码时显示没有任何格式(包括 HTML 代码)

tvMyTextView.setText("There are <i>different ways</i> of coding.\n");

但是当我在 strings.xml 中定义相同的字符串然后加载时

tvMyTextView.setText(R.strings.TestString);

它显示强调。

尝试在 TextView 中嵌入 URL 时,我感到更加困惑,如下所示:

"Click <a href="http://www.poon-world.com">here</a> to switch on the red light.\n";

不用说,我已经尝试了 TextView 的各种属性选项——但除非我错过了什么,否则它们似乎并没有太大的区别。在某些情况下,URL 在文本中以蓝色编码并且可以单击,在其他情况下,我可以看到 HTML 格式。在其他情况下,它是彩色编码的,并且 URL 似乎以某种方式编码在文本中 - 但是当我单击它时没有任何反应。关于 URL 的嵌入,与其他具有“简单”HTML 格式的示例不同,到目前为止,我什至无法找到关于何时有效以及何时无效的规则。谁能帮我解开我头上的结..

4

3 回答 3

5

实际上,来自Android Docs ..

public final void setText (CharSequence text)

设置 TextView 的字符串值。TextView 不接受类似 HTML 的格式,您可以对 XML 资源文件中的文本字符串执行此操作。要设置字符串样式,请将 android.text.style.* 对象附加到 SpannableString,或查看可用资源类型文档以获取在 XML 资源文件中设置格式化文本的示例。

但,

public final void setText (int resid)
  • 没有更多的规范..

但是来自Android Resource String docs..

您可以使用 HTML 标记为字符串添加样式。例如:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="welcome">Welcome to <b>Android</b>!</string>
</resources>

支持的 HTML 元素包括:

<b> for bold text.
<i> for italic text.
<u> for underline text.

有时您可能想要创建一个样式化的文本资源,它也用作格式字符串。通常,这不起作用,因为该String.format(String, Object...)方法将从字符串中删除所有样式信息。解决此问题的方法是编写带有转义实体的 HTML 标记,然后fromHtml(String)在格式化发生后用 恢复。

关于您的 URL 字符串,...

tvMyTextView.setText(Html.fromHtml("Click <a href="http://www.poon-world.com">here</a> to switch on the red light.\n"));

另请查看此 SO Question Set TextView text from html-formatted string resource in XML

Android 字符串资源

于 2012-06-16T10:49:56.773 回答
3
tvMyTextView.setText(Html.fromHtml("There are <i>different ways</i> of coding.\n"));

也试试

下面的链接用于链接化,以便自动分配网站链接。

http://developer.android.com/resources/articles/wikinotes-linkify.html

于 2012-06-16T10:11:42.377 回答
0

在我自己的问题中添加一些注释并且在收到到目前为止的答案之后,我只能得出结论,似乎没有一种可靠的方法可以在任何地方都有效。

在某些情况下 - 根据我的经验,如果格式化的 URL 是纯文本的一部分并且没有被标签包围(例如http://www.poon-world.com,即使只是“Poon-World.com”似乎也可以在大多数情况下),只需设置 TextView 的属性似乎就足够了,链接将是可点击的。但是,如果链接嵌入在 HTML 标记中并且应该可以从某些链接文本中单击,那么似乎除了使用 Html.fromHtml(..) 之外别无他法。

但也有一些我无法解释的特殊情况:在一些活动/布局中,我使用“嵌入式” URL 并设置了前面提到的 Click-properties,不要使用 Html.fromHtml .. 和惊喜!,单击文本中确实创建的链接确实会打开浏览器,但只有在 OnCreate-Event 的代码中添加了以下行之后:

myTextView.setMovementMethod(LinkMovementMethod.getInstance());

(我在另一个线程中发现了这个技巧,感谢作者)不知道为什么,这似乎是Android解析和评估字符串资源的方式。我刚刚提到,除了已经说过的所有内容之外,其他所有寻找解决方案并感到困惑的人都不会开始认为他开始失去理智 - 不,只需测试此页面上提到的方法,通常应该锻炼。

于 2012-06-20T09:31:35.897 回答