2016-12-01 113 views
0

我想使用带有罢工标签的edittext。当然,我已经使用了斜体,粗体标签。Android:如何在edittext中使用HTML的罢工标签

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

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

我看到了这个帖子,但我不能跟着它,因为一个错误。

import android.text.Html; 

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

    } 
} 

错误是ITagHandler不存在。

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

TT

回答

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


    } 
+0

谢谢。但是我想仅对文本的某些部分应用罢工。此方法影响edittext中的所有文本。 – Hokyung

相关问题