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

android– 使用TextFormatted在EditText中不使用strike html标记进行渲染,第1张

概述我试图在EditText控件中呈现一个html字符串.粗体,斜体和下划线html正确呈现,但是直接通过被忽略.这是EditText控件,没什么特别的:<EditTextandroid:id="@+idich_text"android:layout_width="match_parent"android:layout_height="wrap_content"

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

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

<EditText        androID:ID="@+ID/rich_text"        androID:layout_wIDth="match_parent"        androID:layout_height="wrap_content"                androID:gravity="top"        androID:inputType="textFilter|textMultiline|textNoSuggestions"        androID:minlines="8"        androID:textStyle="normal" />

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

var textVIEw = vIEw.FindVIEwByID<EditText> (Resource.ID.rich_text);var HTML = "<b>bold test</b> <u>underline test</u> <i>italic test</i> <strike>strike test 1</strike> <del>strike test 2</del> <s>strike test 3</s>";textVIEw.textformatted = HTML.FromHTML (HTML);

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

我有什么想法我做错了吗?

解决方法:

这是我如何解决这个问题.我创建了一个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 ());        }

以下是它的外观:

总结

以上是内存溢出为你收集整理的android – 使用TextFormatted在EditText中不使用strike html标记进行渲染全部内容,希望文章能够帮你解决android – 使用TextFormatted在EditText中不使用strike html标记进行渲染所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1115722.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存