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

时间:2013-12-26 17:05:19

标签: 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'> 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();
                }
            }
        }
    }
}

有关如何读取id和uri属性的任何建议吗?讨论了使用传递给此函数的XMLReader。 提前谢谢!

--------有一个答案! ---------

嗯 - 还有一些挖掘和瞧!是的 - 您可以在标记的html文本中访问标记中的自定义属性。我必须使用反射来包含来自@rekire的黑暗魔法,以访问xmlReader属性。 (这些元素都不是“裸眼”的“可见”)。 链接位于:link。无需使用重复的Java类或实际包含id的funky标签名称!再次感谢 - @rekire 添加了链接帖子中的代码,这些代码可以解决问题。

0 个答案:

没有答案