gpt4 book ai didi

android - 如何使用 Android TagHandler 读取自定义 html 标签属性

转载 作者:太空狗 更新时间:2023-10-29 15:07:11 25 4
gpt4 key购买 nike

我正在扩展 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 文本中访问您的标签中的自定义属性。我必须包括使用反射访问 xmlReader 属性的 @rekire 在我看来是黑魔法。 (这些元素都不是“肉眼”“可见”的)。链接在这里:link .无需诉诸重复的 java 类或实际上在其名称中包含 id 的时髦标签名称!再次感谢-@rekire添加了从链接的帖子中解释的代码,可以解决问题。

最佳答案

通过将 xmlReader ContentHandler 替换为您自己的 ContentHandler,可以连接到 XMLReader 并获取访问属性。此方法不适用于第一个 html 标签,因此必须在开头添加假标签。 See detailed answer .

关于android - 如何使用 Android TagHandler 读取自定义 html 标签属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20788393/

25 4 0