Android TagHandler对标准标签没有影响

dar*_*ord 7 android textview

我使用TextView来显示HTML字符串,例如:

"测试HTML <a href = \"www.type1.com \"> link1 </ a> <a href = \"www.type2.com \"> link2 </ a>"

如您所见,我需要处理两种不同的标记,因此我需要能够处理两种不同类型的标记并读取href属性.

我尝试使用Html.TagHandler:

private class MyTagHandler implements Html.TagHandler {
    @Override
    public void handleTag(boolean opening, String tag, Editable output, XMLReader xmlReader) {
        Toast.makeText(getContext(), tag, Toast.LENGTH_LONG).show();
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,在<a>标记上未调用handleTag.我做了测试并发现它只对自定义标签有影响.是否也可以处理标准标签?

fma*_*oni 4

Html.TagHandler 自定义实现的目标是提供对 android 框架未处理的标签的处理。因此,为了完成您想要的操作,一种解决方法是将您想要处理的所有标记替换为您知道框架不会处理的另一个标记,因此它将进入您的实现。例如,您可以使用如下方法来准备 html:

public string prepareHTMLForTagHandling(string htmlSource)
    {
        if (htmlSource == null || htmlSource == "")
            return null;

        return htmlSource.replace("<a", "<acustomlink")
                         .replace("</a>", "<acustomlink>");
    }
Run Code Online (Sandbox Code Playgroud)

然后像这样使用它:

Html.fromHtml(prepareHTMLForTagHandling(myHtml), null, myHtmlCustomTagHandler);
Run Code Online (Sandbox Code Playgroud)

最后,在自定义标记处理程序实现中,您将“acustomlink”作为标记而不是“a”处理。

希望能帮助到你。