这是我解决问题的方法。我创建了 ItagHandler 的实现:
public class HtmlTagHandler : Object, Html.ITagHandler {
public void HandleTag (bool opening, string tag, IEditable output, IXMLReader xmlReader) {
if (tag == "strike" || tag == "s" || tag == "del") {
var text = output as SpannableStringBuilder;
if (opening)
Start (text, new Strike ());
else
End (text, Class.FromType (typeof(Strike)), new StrikethroughSpan ());
}
}
private static void Start (SpannableStringBuilder text, Object mark) {
var length = text.Length ();
text.SetSpan (mark, length, length, SpanTypes.MarkMark);
}
private static void End (SpannableStringBuilder text, Class kind, Object newSpan) {
var length = text.Length ();
var span = GetLast (text, kind);
var where = text.GetSpanStart (span);
text.RemoveSpan (span);
if (where != length)
text.SetSpan (newSpan, where, length, SpanTypes.ExclusiveExclusive);
}
private static Object GetLast (ISpanned text, Class kind) {
var length = text.Length ();
var spans = text.GetSpans (0, length, kind);
return spans.Length > 0 ? spans.Last () : null;
}
}
class Strike : Object {
}
这可以这样调用:
public static ISpanned ToHtml (this string html) {
return Html.FromHtml (html ?? string.Empty, null, new HtmlTagHandler ());
}
它看起来是这样的: