我对 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 格式的示例不同,到目前为止,我什至无法找到它何时有效以及何时无效的规则。谁能帮我解开脑中的结..
最佳答案
实际上,来自 Android 文档..
public final void setText (CharSequence text)
设置 TextView 的字符串值。 TextView 不接受类似 HTML 的格式设置,您可以在 XML 资源文件中使用文本字符串。要设置字符串样式,请将 android.text.style.* 对象附加到 SpannableString,或查看可用资源类型文档以获取在 XML 资源文件中设置格式化文本的示例。
但是,
public final void setText (int resid)
- 没有更多关于它的规范..
但是从 Android 资源字符串文档..
您可以使用 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 问题 Set TextView text from html-formatted string resource in XML
和
关于android - TextView 的 HTML 格式化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11062508/