我扩展了Android TagHandler类,以处理TextField中的自定义html标签。到目前为止,我成功地拦截了标签并将自定义功能分配给这些标签的"onClick()"事件。然而,我无法捕获这些自定义标签的任何属性,例如:
有关如何读取id和uri属性的建议是什么?之前有讨论过使用传递给该函数的XMLReader。提前谢谢!
-------- 有答案了! ---------
嗯——再研究一下,就可以啦!是的,您可以在标记化HTML文本中访问自定义标记中的属性。我必须包含看起来像@rekire的黑魔法的代码,使用反射来访问xmlReader属性。(这些元素对“裸眼”不可见)。 链接在这里:link。无需使用重复的Java类或实际上包括id在其指定中的时髦标记名称!再次感谢@rekire。添加了从链接帖子转述的代码,这将解决问题。
"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在其指定中的时髦标记名称!再次感谢@rekire。添加了从链接帖子转述的代码,这将解决问题。