且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

罢工html标记未在具有TextFormatted的EditText中呈现

更新时间:2023-12-05 22:10:58

这是我解决问题的方法.我创建了一个ITagHandler的实现:

Here is how I solved the issue. I created an implemented of 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 ());
        }

这是它的外观: