2016-12-01 4 views
0

ストライクタグでedittextを使いたいです。もちろん、私はすでにイタリックで太字のタグを使用しています。Android:edittextでhtmlのストライクタグを使用する方法

私が見つけたことによると、アンドロイドは基本的にストライクタグをサポートしていません。

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

関連する問題