Android use custom html tag in TextView

13224 ワード

AndroidのTextViewコントロールは、
などの簡単なhtmlリッチテキストをサポートしていることを知っていますが、具体的にはどのラベルですか?実はHtmlクラスのソースコードを見ればわかります.
private void handleStartTag(String tag, Attributes attributes) {

        if (tag.equalsIgnoreCase("br")) {

            // We don't need to handle this. TagSoup will ensure that there's a </br> for each <br>

            // so we can safely emite the linebreaks when we handle the close tag.

        } else if (tag.equalsIgnoreCase("p")) {

            handleP(mSpannableStringBuilder);

        } else if (tag.equalsIgnoreCase("div")) {

            handleP(mSpannableStringBuilder);

        } else if (tag.equalsIgnoreCase("em")) {

            start(mSpannableStringBuilder, new Bold());

        } else if (tag.equalsIgnoreCase("b")) {

            start(mSpannableStringBuilder, new Bold());

        } else if (tag.equalsIgnoreCase("strong")) {

            start(mSpannableStringBuilder, new Italic());

        } else if (tag.equalsIgnoreCase("cite")) {

            start(mSpannableStringBuilder, new Italic());

        } else if (tag.equalsIgnoreCase("dfn")) {

            start(mSpannableStringBuilder, new Italic());

        } else if (tag.equalsIgnoreCase("i")) {

            start(mSpannableStringBuilder, new Italic());

        } else if (tag.equalsIgnoreCase("big")) {

            start(mSpannableStringBuilder, new Big());

        } else if (tag.equalsIgnoreCase("small")) {

            start(mSpannableStringBuilder, new Small());

        } else if (tag.equalsIgnoreCase("font")) {

            startFont(mSpannableStringBuilder, attributes);

        } else if (tag.equalsIgnoreCase("blockquote")) {

            handleP(mSpannableStringBuilder);

            start(mSpannableStringBuilder, new Blockquote());

        } else if (tag.equalsIgnoreCase("tt")) {

            start(mSpannableStringBuilder, new Monospace());

        } else if (tag.equalsIgnoreCase("a")) {

            startA(mSpannableStringBuilder, attributes);

        } else if (tag.equalsIgnoreCase("u")) {

            start(mSpannableStringBuilder, new Underline());

        } else if (tag.equalsIgnoreCase("sup")) {

            start(mSpannableStringBuilder, new Super());

        } else if (tag.equalsIgnoreCase("sub")) {

            start(mSpannableStringBuilder, new Sub());

        } else if (tag.length() == 2 &&

                   Character.toLowerCase(tag.charAt(0)) == 'h' &&

                   tag.charAt(1) >= '1' && tag.charAt(1) <= '6') {

            handleP(mSpannableStringBuilder);

            start(mSpannableStringBuilder, new Header(tag.charAt(1) - '1'));

        } else if (tag.equalsIgnoreCase("img")) {

            startImg(mSpannableStringBuilder, attributes, mImageGetter);

        } else if (mTagHandler != null) {

            mTagHandler.handleTag(true, tag, mSpannableStringBuilder, mReader);

        }

    }

上記のコードから分かるように、TextViewでサポートされているラベルには以下のものがあります.

改行,

段落,

,強調,太字,重点強調,は参照,定義ラベル,斜体,大フォント,小フォント,フォント,
参照ブロック,monospacedフォントを定義する文字,链接,下线,上面,皮克查上的几个拉贝尔和属性可能没有有用。font的size属性是在苏斯科德中没有处理的,所以size属性没有有用,所以具体的是试试苏斯科德看后不知道。次に示すString source="<font size='17 sp'color='#FF 000'>font</font>"+ 「<u>アンダースコア</u>」+ "<h1>h1<h1>" + "<big>big</big>"+ "<small>small</small>"+ "<strong>strong</strong>"+ 「<i>斜体</i>」+ 「<SP>上付き</SP>」+ 「<SB>下付き</SB>」; text.setText(Html.fromHtml(source)); 实行的效果如下。除了上述简单的照片变换之外,也可以在TextView上显示图像,表情可以这样实现.正如上记的苏斯科德所知道的那样,如果在解析中没有识别的情况下,mTagHandler被称出.handleTag(true, tag, mSpannableStringBuilder, mReader); TagHandlerインタフェースでラベルをカスタマイズできます.以下,Toast的活动被标记为卡斯塔迈斯,克里克里克里克里拉贝尔的内容(当然其他活动也可以实现).public class MyTagHandler implements TagHandler { int start; int stop; Context context; int color; public MyTagHandler(Context context, int color) { this.context = context; this.color = color; } @Override public void handleTag(boolean opening, String tag, Editable output, XMLReader xmlReader) { if (tag.toLowerCase().equals("mytag")) { if (opening) { start = output.length(); } else { stop = output.length(); String content = output.subSequence(start, stop).toString(); output.setSpan(new MySpan(context, color, content), start, stop, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } } } class MySpan extends ClickableSpan implements OnClickListener { String content; int color; int type; Context context; @Override public void updateDrawState(TextPaint ds) { ds.setColor(color);//色の設定 ds.setUnderlineText(false);//下線を表示するかどうか } public MySpan(Context context, int color, String content) { this.context = context; this.color = color; this.content = content; } @Override public void onClick(View widget) { //クリックイベントの追加 Toast.makeText(context, content, Toast.LENGTH_SHORT).show(); } } }String source=「<u>下線ラベル</u><mytag><big>カスタムラベル</mytag><i>斜体</i>」; textview.setText(Html.fromHtml(source, null, new MyTagHandler(this, 0xFF4D8C4D))); textview.setMovementMethod(LinkMovementMethod.getInstance()); 如果把"卡斯塔姆拉贝尔"弄清的话,Toast的程序被表示.前の例では、Clickablespan为了实现卡斯塔姆克里克活动。android也可以使用的text.style包装中的其他Span可以实现背景的预测,可以根据需要进行研究。