Ich habe HTML, das ich mit Spanned
in ein Html.fromHtml(...)
konvertiere, und ich habe ein benutzerdefiniertes Tag, das ich darin verwende:
Also habe ich ein TagHandler
implementiert, um dieses benutzerdefinierte Tag zu behandeln, so:
In diesem Fall bekomme ich eine SAX-Ausnahme, da ich glaube, dass das "id" -Feld eigentlich ein Attribut und keine Eigenschaft ist. Es gibt jedoch keine Methode getAttribute()
für XMLReader
. Also meine Frage ist, wie bekomme ich den Wert des Feldes "ID" mit dieser XMLReader
? Danke.
Es ist möglich, XmlReader
von TagHandler
zu verwenden und Zugriff auf Tag-Attributwerte ohne Reflektion zu erhalten, aber diese Methode ist noch einfacher als die Reflektion. Der Trick besteht darin, ContentHandler
used von XmlReader
durch ein benutzerdefiniertes Objekt zu ersetzen. Das Ersetzen von ContentHandler
kann nur im Aufruf von handleTag()
erfolgen. Das stellt ein Problem beim Abrufen von Attributwerten für das erste Tag dar, das durch Hinzufügen eines benutzerdefinierten Tags am Anfang von html behoben werden kann.
Mit dieser Klasse ist das Lesen von Attributen einfach:
%Vor% Dieser Ansatz hat den Vorteil, dass er die Verarbeitung einiger Tags unter Verwendung der Standardverarbeitung für andere, z. Sie können sicherstellen, dass ImageSpan
Objekte nicht erstellt werden:
Es gibt eine Alternative zu den anderen Lösungen, die es nicht erlaubt, benutzerdefinierte Tags zu verwenden, sondern den gleichen Effekt:
%Vor%Dann lies es so:
%Vor% Je nachdem, was Sie mit Ihren benutzerdefinierten Tags tun möchten, können Ihnen die obigen Informationen helfen. Wenn Sie sie nur lesen möchten, brauchen Sie kein SpannableStringBuilder
, sondern nur getText
auf Spanned
interface, um dies zu untersuchen.
Beachten Sie, dass Annotation
, das <annotation foo="bar">...</annotation>
repräsentiert, seit der API-Stufe 1 ein eingebautes Android ist! Es ist wieder einer dieser versteckten Edelsteine. Das Attribut hat die Einschränkung eines Attributs pro <annotation>
-Tag, aber nichts hindert Sie daran, mehrere Anmerkungen zu verschachteln, um mehrere Attribute zu erhalten:
Wenn Sie die Schnittstelle Editable
anstelle von Spannable
verwenden, können Sie auch den Inhalt jeder Anmerkung ändern. Zum Beispiel den obigen Code ändern:
wird so aussehen, als ob Sie dies in der XML-Datei hatten:
%Vor%Wenn Sie Änderungen vornehmen, die sich auf die Länge des Textes auswirken, müssen Sie darauf achten, dass sich die Abschnitte verschieben. Stellen Sie sicher, dass Sie die span start / end-Indizes zu den richtigen Zeiten lesen, am besten, wenn Sie sie in die Methodenaufrufe einbinden.
Mit Editable
können Sie auch eine einfache Suche durchführen und die Substitution ersetzen:
Wenn Sie nur ein Attribut benötigen, ist der Vorschlag von vorrtex eigentlich ziemlich solide. Um Ihnen ein Beispiel zu geben, wie einfach es zu handhaben wäre, schauen Sie hier nach:
%Vor%Und in Ihrem benutzerdefinierten TagHandler verwenden Sie nicht gleich, sondern indexOf
%Vor%Und Sie können dann den Postfix-Wert in Ihrem OnClick-View-Parameter als Tag übergeben, um ihn generisch zu halten.