14

为了TextView显示(并友好地处理)Html 字符串,我的代码如下所示:

// itemHtml is a String of HTML defined above

TextView itemContent = (TextView) findViewById(R.id.itemContent);
itemContent.setText(Html.fromHtml(itemHtml));
itemContent.setMovementMethod(LinkMovementMethod.getInstance());

如果 Html 字符串有链接TextView,则会生成可单击和可聚焦的链接。当用户关注特定链接时(例如,通过使用 d-pad),链接文本会以某种重要方式发生变化,以表明获得了焦点。

问题是,当我使用带有 d-pad 的设备(使用 Honeycomb(例如 Google TV)或 Ice Cream Sandwich 的 Android 风格)测试相同的模式时,文本中的链接没有显示链接具有焦点的明显迹象。

我知道它正在获得焦点,因为当您然后按 Enter 键时,它会执行指定的操作。您甚至可以在文本中的各个链接之间移动;您只是在猜测您当前所在的链接,这会导致非常糟糕的用户体验。

有什么我做错了吗?有没有办法解决这个问题或解决这个问题?

4

4 回答 4

2

编辑:有点疯狂之后,我终于认为我找到了解决方案。但是,此解决方案仅适用于 Honeycomb。ICS仍未解决!

从 API 11 开始,Android 在 TextViews 上有一个新设置,用于定义文本是否可选。

您可以setTextIsSelectable(true)在 TextView 上设置它,或者在 XML 布局中定义它android:textIsSelectable="true"

最好在 XML 中定义它,这样保持应用程序向后兼容是微不足道的。只需确保您的目标版本 >= 11,否则您可能会收到错误消息。

于 2011-10-31T21:52:58.473 回答
1

HTML.fromHTML 的操作方式是通过在字符串的各个字符中创建具有不同效果的“跨度”。一种解决方法是使用ClickableSpan和另一个 CharacterStyles 将文本着色为可点击。之前的 span 将允许您注册一个回调,这个回调可以是广播一个查看 url 的意图(这将打开一个浏览器)。

于 2011-10-24T12:34:03.480 回答
1

Honeycomb+ 的文本颜色状态列表可能不会将焦点状态设置为不同的颜色,或者您将颜色覆盖为常量。

检查 your_android_sdk_directory/android-14/data/res/ 中的颜色 + 样式

将文本设置为 android:autoLink="web" 也可能有帮助?

于 2011-10-28T14:13:00.907 回答
1

最好的方法是在你的 html 中添加 CSS 样式。我知道 Android 支持:hover选择器。所以你可能会这样:

String myLink = "<a href=\"http:\/\/google.com\">your link</a>"
Html.fromHtml(myLink);

并找到一种将 CSS 数据包含到其中的方法:(我不确定如何,但我认为这是可能的)

a :hover {
   color: red;
}

更新:

我想你的问题的答案就在那里

于 2011-10-31T14:06:57.437 回答