【问题标题】:Android: How to use strike tags of html in edittextAndroid:如何在edittext中使用html的罢工标签
【发布时间】:2016-12-01 06:56:27
【问题描述】:

我想使用带有罢工标签的edittext。当然,我已经使用了斜体、粗体标签。

据我查到,android基本不支持strike标签。

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

我看到了这个帖子,但是因为一个错误,我无法关注它。

import android.text.Html;

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

    }
}

错误是ITagHandler不存在。

我应该如何使用罢工标签?

T T

【问题讨论】:

    标签: android html tags


    【解决方案1】:

    你可以使用:

    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;
                }
            }
    
    
        }
    

    【讨论】:

    • 谢谢。但我只想对文本的某些部分应用罢工。此方法影响edittext中的所有文本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    • 1970-01-01
    • 2014-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多