【问题标题】:How to implement "Rich Edittext" in android如何在android中实现“Rich Edittext”
【发布时间】:2015-03-04 02:16:06
【问题描述】:

我正在尝试在 android 中实现“Rich Edittext”,我想应用“粗体、斜体、下划线、项目符号跨度、数字缩进跨度等...”效果。所以,不知何故,我完成了粗体、斜体和其他功能,但我无法完成 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

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

【问题讨论】:

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


    【解决方案1】:
    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);//为粗体

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

    附:我认为这不是优雅的方式,但它确实有效。

    【讨论】:

    • 感谢您的回答,您能给我任何工作示例或简单的演示代码吗,因为我无法弄清楚这些“选项”、“文本”、“选定文本”等是什么.. 变量。抱歉,我是 android 新手,对它了解不多……我正在尝试实现类似这种 URL 类型的应用程序,play.google.com/store/apps/details?id=com.hly.notes
    • 好的,谢谢你的更新,关于子弹和数字缩进跨度,我该如何实现这个功能???
    • @user3660803 在这种情况下,您需要实现自己的视图,因为 SDK 的工具不会让您有任何机会在 EditText 中进行此操作。
    • 有点晚,但支持 ul。见the list of supported HTML tags。或者,请参阅 this gist 创建自定义 spannables。
    猜你喜欢
    • 2011-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-26
    相关资源
    最近更新 更多