Android:如何在edittext中使用html的strike标签

时间:2016-12-01 06:56:28

标签: android html tags

我想将edittext与strike标签一起使用。当然我已经使用了斜体,粗体标签。

根据我的发现,android基本上不支持strike标记。

https://stackoverflow.com/a/34931560/7068422

我看过这篇文章,但由于错误,我无法关注它。

import android.text.Html;

public class StrikeTagHandler {
    public class HtmlTagHandler : Object, Html.ITagHandler {

    }
}

错误是ITagHandler不存在。

我应该如何使用打击标记?

T T

1 个答案:

答案 0 :(得分:0)

您可以使用:

yourEditText.setPaintFlags(tv.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);

我搜索您的问题并找到解决方案: 基于Combining Spannable with String.format()

你的代码应该是:

String 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>";
        Spanned spanned = Html.fromHtml(html, null, new MyHtmlTagHandler());
        tv.setText(spanned);


        EditText edt = (EditText) findViewById(R.id.edt);
        edt.setText(spanned);

MyHtmlTagHandler

public class MyHtmlTagHandler implements Html.TagHandler {

        public void handleTag(boolean opening, String tag, Editable output,
                              XMLReader xmlReader) {
            if (tag.equalsIgnoreCase("strike") || tag.equals("s")) {
                processStrike(opening, output);
            }
        }

        private void processStrike(boolean opening, Editable output) {
            int len = output.length();
            if (opening) {
                output.setSpan(new StrikethroughSpan(), len, len, Spannable.SPAN_MARK_MARK);
            } else {
                Object obj = getLast(output, StrikethroughSpan.class);
                int where = output.getSpanStart(obj);

                output.removeSpan(obj);

                if (where != len) {
                    output.setSpan(new StrikethroughSpan(), where, len, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                }
            }
        }

        private Object getLast(Editable text, Class kind) {
            Object[] objs = text.getSpans(0, text.length(), kind);

            if (objs.length == 0) {
                return null;
            } else {
                for (int i = objs.length; i > 0; i--) {
                    if (text.getSpanFlags(objs[i - 1]) == Spannable.SPAN_MARK_MARK) {
                        return objs[i - 1];
                    }
                }
                return null;
            }
        }


    }