如何在android中实现“Rich Edittext”

时间:2015-01-06 12:00:23

标签: android android-edittext number-formatting spannablestring bulletedlist

我正在尝试在android中实现“Rich Edittext”,我希望应用效果,如“粗体,斜体,下划线,子弹跨度,数字缩进跨度等......”效果。所以,不知何故,我已经完成了Bold,Italic和其他功能,但我无法完成Bullet和NumberIndent。

我做了很多研究并检查了很多例子和其他东西,但无法完成任务。我从下面链接下载了一些样式类,但我无法理解如何在代码中使用这个类。

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.3.7_r1/android/text/style/BulletSpan.java?av=f

所以这里的任何人都做了一些类似的任务或其他任何让我走向正确方向的事情。

1 个答案:

答案 0 :(得分:2)

public class TextTypeOption {

    public final static int BOLD = 1;
    public final static int ITALIC = 2;
    public final static int UNDERLINE = 3;

    public TextTypeOption(int option) {
        this.option = option;
    }

    public int getOption() {
        return this.option
    }

    public boolean isBold() {
       return option == BOLD;
    }

    public boolean isItalic() {
       return option == ITALIC;
    }

    public boolean isUnderline() {
       return option == UNDERLINE;
    }
}

定义TextTypeOption值:

  

TextTypeOption option = new TextTypeOption(TextTypeOption.BOLD); // for bold

1)使用Html.fromText(String text)

    if(option.isBold()) {
        text = text.replace(selectedText , "<b>"+ (selectedText + "</b>");
        et.setText(Html.fromHtml(text));
    }

    if(option.isItalic()) {
        text = text.replace(selectedText , "<i>"+ (selectedText + "</i>");
        et.setText(Html.fromHtml(text));
    }

    if(option.isUnderline()) {
        text = text.replace(selectedText , "<u>"+ (selectedText + "</u>");
        et.setText(Html.fromHtml(text));
    }

2)使用Spannable

    SpannableString span = new SpannableString(text);

    if(option.isUnderline()) {
        span.setSpan(new UnderlineSpan(),startSelection, endSelection , 0);
    }

    if(option.isBold()) {
        span.setSpan(new StyleSpan(Typeface.BOLD), startSelection, endSelection ,  0);
    }

    if(option.isItalic()) {
        span.setSpan(new StyleSpan(Typeface.ITALIC), startSelection, endSelection , 0);
    }
    et.setText(span, TextView.BufferType.SPANNABLE);

P.S。我认为这不是优雅的方式,但它有效。