当前位置: 首页 > 面试题库 >

Android:如何使用Html.TagHandler?

金烨华
2023-03-14
问题内容

我正在尝试为留言板构建一个android应用程序。为了显示帖子内容的html" target="_blank">格式化html,我选择了TextView和Html.fromHtml()方法。不幸的是,那仅涵盖了几个html标签。未知标签由实现TagHandler的类处理,并且必须由我自己生成。

现在,我在Google上搜索了很多,找不到有关该类如何工作的示例。让我们考虑一下我有一个用于标记某些文本的u标记(我知道此标记已弃用,但无论如何)。我的TagHandler看起来如何?

通过以下方式调用它:

public void handleTag(boolean opening, String tag, Editable output, XMLReader xmlReader) {

前两个参数很好。我想我必须使用output.append()修改输出。但是,如何在此处附加带下划线的内容?


问题答案:

所以,我终于自己弄清楚了。

public class MyHtmlTagHandler implements TagHandler {

    public void handleTag(boolean opening, String tag, Editable output,
            XMLReader xmlReader) {
        if(tag.equalsIgnoreCase("strike") || tag.equals("s")) {
            processStrike(opening, output);
        }
    }

    private void processStrike(boolean opening, Editable output) {
        int len = output.length();
        if(opening) {
            output.setSpan(new StrikethroughSpan(), len, len, Spannable.SPAN_MARK_MARK);
        } else {
            Object obj = getLast(output, StrikethroughSpan.class);
            int where = output.getSpanStart(obj);

            output.removeSpan(obj);

            if (where != len) {
                output.setSpan(new StrikethroughSpan(), where, len, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            }
        }
    }

    private Object getLast(Editable text, Class kind) {
        Object[] objs = text.getSpans(0, text.length(), kind);

        if (objs.length == 0) {
            return null;
        } else {
            for(int i = objs.length;i>0;i--) {
                if(text.getSpanFlags(objs[i-1]) == Spannable.SPAN_MARK_MARK) {
                    return objs[i-1];
                }
            }
            return null;
        }
    }


}

对于您的TextView,您可以这样称呼:

myTextView.setText (Html.fromHtml(text.toString(), null, new MyHtmlTagHandler()));

如果有人需要它。



 类似资料:
  • 问题内容: 我试图像这样使用Android : 结果很好,我有:2010-09-29 但是如果我更改为 问题是我会得到03-03-0035 !!!! 为什么以及如何获取格式? 问题答案: 我假设您想反转日期格式? SimpleDateFormat可用于解析和格式化。您只需要两种格式,一种解析字符串,另一种返回所需的打印输出: 从Java 8开始:

  • 问题内容: 从设置开始20分钟后,我需要触发一段代码。 有人可以向我展示如何 中使用示例代码吗? 我一直在玩一些代码,但几天都行不通。 问题答案: 说到“一些示例代码”并不是那么容易。 以下是显示的设置的代码段: 在此示例中,我正在使用。如果你想要一键式警报,则只需使用set()。确保给警报的启动时间与在的初始参数中使用的时间相同。在上面的示例中,我正在使用,因此我的时基为。

  • 我正在考虑在我的下一个项目中实现Android Volley库(关于Volley的Google IO演示)。 然而,我还没有找到任何用于该库的严肃API。 我如何上传文件、发送/获取请求,以及使用Volley将Gson解析器添加为解析器? 源代码

  • 问题内容: 在浏览Android WebView文档时遇到了ServiceWorkerController,并决定尝试一下。不幸的是,我无法截获任何电话。我知道WebViewClient.shouldInterceptRequest,但有兴趣了解有关ServiceWorkerController的更多信息。不幸的是,这些文档比我下面已经实现的稀疏。任何帮助,将不胜感激。 我整理了一个由单个Acti

  • 问题内容: 这是我的第一篇文章.. 因此,我正在学习Android和Java(来自Actionscript),并且正在从事以下项目: 我试图单击一个ImageView,让该ImageView交换图像一秒钟,然后返回到原始图像。(这是针对窃听游戏的) 听起来很容易,对吧?我花了整整一天的时间试图让一个标准的Java Timer / TimerTask工作..没有运气.. 有没有更好的办法?我的意思是

  • 问题内容: 我想在Android设备上使用。该断言似乎不起作用,因此我在网上搜索后发现了这种本地解决方案: 亚行外壳setprop debug.assert 1 它确实可以在我的本地计算机上运行。 我想使用我的Eclipse项目运行此命令(因此它将在源代码控件中)。我该怎么做? 问题答案: 断言无法在Android中运行,因为大多数情况下,一个人不是在调试模式下运行,而是运行一些优化的代码。因此,