我有一个ListView,除了许多其他视图之外,每行包含一个TextView.TextView呈现可能包含链接的html内容.
以下代码显示在列表适配器中.m_textview.setMovementMethod(LinkMovementMethod.getInstance()); m_textview.setText(Html.fromHtml(myhtmlcontent));
这会导致listview不再接收点击事件.我决定将列表onclick代码放在适配器返回的视图上.这根本不是很有效.现在,当我单击除textview之外的行中的任何位置时,我可以启动另一个活动.我希望用户能够单击textview的非链接部分并启动另一个活动.
如果我将onclick移动到textview而不是其父视图,它可以工作,但现在点击链接会触发两个事件 - 一个用于链接的单击,另一个用于textview(这是不需要的).
我注意到谷歌+并以我想要的方式偷看Android工作.我不确定如何实现.
我有需要在 TextView 中显示的 html 文本。html 可能看起来像这样 -
<font color="#AFEEEE"><font style="background-color: rgb(255,140,0);">Text with background and color</font></font>
Run Code Online (Sandbox Code Playgroud)
Html.fromHtml 不支持字体标签颜色以外的任何属性。但我们绝对必须展示背景。我可以编写一个自定义标记处理程序,但不传入属性,仅传入标记。实现此目的的最佳方法是什么?
注意:无法使用 Webview。
我尝试了下面的代码。如果我在文本上设置 raw,它会起作用,但如果我进一步处理它并将其传递给 Html.fromHtml,它不会显示背景。
public static final String sText =
"Background on <font style=\"background-color: rgb(255,255,0);\">pa</font>rt text only";
Pattern pattern = Pattern.compile(BACKGROUND_PATTERN);
Matcher matcher = pattern.matcher(sText);
SpannableString raw = new SpannableString(sText);
BackgroundColorSpan[] spans =
raw.getSpans(0, raw.length(), BackgroundColorSpan.class);
for (BackgroundColorSpan span : spans) {
raw.removeSpan(span);
}
while (matcher.find()) {
raw.setSpan(new BackgroundColorSpan(0xFF8B008B),
matcher.start(2), matcher.start(2) + matcher.group(2).length(),
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
sText = raw.toString();
final Spanned convertedHtml = …Run Code Online (Sandbox Code Playgroud)