如何使用Android TagHandler读取自定义html标记属性

如何使用Android TagHandler读取自定义html标记属性,android,html,textview,markup,Android,Html,Textview,Markup,我正在扩展Android TagHandler类,以处理TextField中的自定义html标记。到目前为止,很好,我能够截取标记并将自定义功能分配到这些标记的“onClick()”。但是-我无法捕获这些自定义标记的任何属性,例如: "This is an example of a custom mark-up tag embedded in text that a text field would handle <custom id='1233' uri='0023'> CUSTO

我正在扩展Android TagHandler类,以处理TextField中的自定义html标记。到目前为止,很好,我能够截取标记并将自定义功能分配到这些标记的“onClick()”。但是-我无法捕获这些自定义标记的任何属性,例如:

"This is an example of a custom mark-up tag embedded in text that a text field would handle <custom id='1233' uri='0023'> CUSTOM </custom>and that I need to capture."
“这是一个嵌入文本中的自定义标记的示例,文本字段将处理自定义标记,我需要捕获该标记。”
我能够捕获自定义标记的出现,但不能捕获具有以下属性的属性:

public class SpecialTagHandler implements TagHandler
{
    @Override
    public void handleTag(
      boolean opening,
      String tag,
      Editable output,
      XMLReader xmlReader)
    {
        if(tag.equalsIgnoreCase("custom")) {

            // handle the custom tag
            if(opening) {

                Log.e(TAG, "found custom tag OPENING");
                try {
                    Field elementField = xmlReader.getClass().getDeclaredField("theNewElement");
                    elementField.setAccessible(true);

                    try {
                        Object element = elementField.get(xmlReader);
                        Field attsField = element.getClass().getDeclaredField("theAtts");
                        attsField.setAccessible(true);

                        Object atts = attsField.get(element);
                        Field dataField = atts.getClass().getDeclaredField("data");
                        dataField.setAccessible(true);

                        String[] data = (String[])dataField.get(atts);
                        Field lengthField = atts.getClass().getDeclaredField("length");
                        lengthField.setAccessible(true);

                        int length = (Integer)lengthField.get(atts);
                        String mIdAttribute = null;
                        String mUrlAttribute = null;

                        for(int i = 0; i < length; i++) {
                            if("id".equals(data[i*5 + 1])) {
                                mIdAttribute = data[i*5 + 4];
                            } else if("uri".equals(data[i*5 + 1])) {
                                mUrlAttribute = data[i*5 + 4];
                            }
                        }
                        Log.e(TAG, "id: " + mIdAttribute + " url: " + mUrlAttribute);
                    } catch (IllegalArgumentException e) {
                        e.printStackTrace();
                    } catch (IllegalAccessException e) {
                        e.printStackTrace();
                    }
                } catch (NoSuchFieldException e1) {
                    e1.printStackTrace();
                }
            }
        }
    }
}
公共类SpecialTagHandler实现TagHandler
{
@凌驾
公共空间把手(
布尔开,
字符串标记,
可编辑输出,
XMLReader(XMLReader)
{
if(标记为equalsIgnoreCase(“自定义”)){
//处理自定义标记
如果(开幕){
Log.e(标签,“发现自定义标签打开”);
试一试{
Field elementField=xmlReader.getClass().getDeclaredField(“theNewElement”);
elementField.setAccessible(true);
试一试{
objectelement=elementField.get(xmlReader);
字段attsField=element.getClass().getDeclaredField(“theAtts”);
attsField.setAccessible(真);
对象atts=attsField.get(元素);
Field dataField=atts.getClass().getDeclaredField(“数据”);
dataField.setAccessible(true);
字符串[]数据=(字符串[])数据字段.get(atts);
字段长度字段=atts.getClass().getDeclaredField(“长度”);
lengthField.setAccessible(真);
int length=(整数)lengthField.get(atts);
字符串mIdAttribute=null;
字符串mUrlAttribute=null;
for(int i=0;i
还有关于如何读取id和uri属性的建议吗?关于使用传递给此函数的XMLReader进行了讨论。 提前谢谢

--------有答案---------

好吧,再挖一些,瞧!是-您可以访问标记html文本中标记中的自定义属性。我必须包括@rekire使用反射来访问xmlReader属性的黑暗魔法。(这些元素都不是“肉眼可见的”)。 链接位于此处:。不需要求助于重复的java类或时髦的标记名,它们实际上在名称中包含id!再次感谢-@rekire
添加了从链接帖子中转述的代码,这将起到作用。

可以通过使用自己的ContentHandler替换XMLReader ContentHandler来连接到
XMLReader
,并获得访问属性。此方法不适用于第一个html标记,因此必须在开始时添加伪标记

它们不会传递属性,因此您可能无法传递that@pskink-此处尝试-使用反射。-不确定在我的例子中这是如何实现的-我只能解析xmlReader声明的字段-如果您真的需要访问自定义标记中的Attibutes复制/粘贴Html类并传递属性(而不是xmlReader)作为第三个参数在跟踪可用内容后,例如,在本例中,在迭代xmlReader时,我似乎对以下内容有一个句柄:HEADER_size、mImageGetter、mReader、mSource、mSpannableStringBuilder、mTagHandler。在我剪切'n'pastin'之前,这些参数有什么用处吗?看,方法handleStartTag,你需要它的第二个参数,而不是任何类字段,