使用TextFormatted在EditText中使用strike html标记进行渲染

时间:2016-01-21 17:17:57

标签: android xamarin android-edittext xamarin.android

我试图在EditText控件中呈现一个html字符串。粗体,斜体和下划线html正确呈现,但是直接通过被忽略。

这是EditText控件,没什么特别的:

    iframe.contentWindow.history.go(-1);
    iframe.contentWindow.history.go(1);

以下是在EditText控件中设置html的代码:

    iframe.contentWindow.history.go(-1);
    iframe.contentWindow.history.go(1);

以下是它如何显示的屏幕截图,注意通过测试的罢工是如何工作的。

enter image description here

任何想法我做错了什么?

2 个答案:

答案 0 :(得分:5)

以下是我解决问题的方法。我创建了一个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 ());
        }

以下是它的外观:

enter image description here

答案 1 :(得分:4)

<strike>不受支持。我找不到包含所有支持的HTML标记列表的官方文档。但是,如果你看一下源代码,你就不会在那里找到支持。

https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/java/android/text/Html.java

我可以收集以下标签:

Tags                Format
b, strong           Bold
i, em, cite, dfn    Italics
u                   Underline
sub                 Subtext
sup                 Supertext
big                 Big
small               Small
tt                  Monospace
h1 … h6             Headlines
img                 Image
font                Font face and color
blockquote          For longer quotes
a                   Link
div, p              Paragraph
br                  Linefeed