gpt4 book ai didi

android - 罢工 html 标签不呈现在 EditText 与 TextFormatted

转载 作者:太空宇宙 更新时间:2023-11-03 11:55:42 24 4
gpt4 key购买 nike

我正在尝试在 EditText 控件中呈现 html 字符串。粗体、斜体和下划线 html 正确呈现,但删除线被忽略。

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

<EditText
android:id="@+id/rich_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/Widget.EditText"
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);

这是它如何显示的屏幕截图,请注意删除线测试是如何不起作用的。

enter image description here

知道我做错了什么吗?

最佳答案

这是我解决问题的方法。我创建了一个 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

关于android - 罢工 html 标签不呈现在 EditText 与 TextFormatted,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34930166/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com