我对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格式化的另一个例子不同,到目前为止我甚至找不到一个规则,当它工作时和不工作时。任何人都可以帮我解开脑袋里的结..
答案 0 :(得分: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)
恢复。
关于您的网址字符串,......
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
和
答案 1 :(得分:3)
tvMyTextView.setText(Html.fromHtml("There are <i>different ways</i> of coding.\n"));
也试试
以下链接用于链接以便自动进行网站链接分配。
http://developer.android.com/resources/articles/wikinotes-linkify.html
答案 2 :(得分: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解析和评估字符串资源的方式。我刚刚提到,除了已经说过的所有内容之外,其他所有人都在寻找解决方案而感到困惑并没有开始认为他开始失去理智 - 不,只是测试本页提到的方法,通常应该锻炼。