Android 自定义可编辑图文混排EditText

这篇博客介绍了如何在Android中自定义EditText以实现图文混排功能,使用了ImageSpan类来插入图片,并提供了代码示例。文章通过反向逻辑,从已有的内容集合出发,展示如何构建和编辑EditText的内容。
摘要由CSDN通过智能技术生成

深知各位看官品性,所以先上图,然后再听我吹《我和图文混排不得不说的故事》系列之----没有故事!(为了死气沉沉的代码更有生气,我给各位看官下载的美女)

各位同道,时隔半年,我胡汉三又回来了!不是我不想来,实在是。。人在江湖,身不由己啊!总结一句话,一入码门深如海,从此节操是路人!(不发图就感觉无法表达我此刻丰富的内心)

这半年来,更证实了一句话:需求是永无止境的。在我们迈向成功的路上,需求才是最大的绊脚石。没有需求,我们就自由了!(失业了)。

如果要问我为什么这个界面这么丑,我只好说:因为小学,中学,高中的美术课都被语数外给占用了。。。

发几句牢骚,当真你就输了,哈哈。

正文:

现在对于大多数APP来说,社区模块已经习以为常了。在发表言论时,发图功能也变得非常常见(比如和我一样内心复杂的你们)。实现类似的功能,除了富文本,还有动态布局listview,这里讲的是另外一种,自定义EditText。(就是在EditText基础上改吧改吧)

一贯的宗旨:知其然必知其所以然!

Google 为我们提供了 ImageSpan 类,专门应对在文本中插入图片。该类构造方法比较多,主要针对Bitmap 和 Drawable ,也可以根据资源ID直接加载图片。本文中用到的构造函数为:

public ImageSpan(Context context, Bitmap b)
ImageSpan 代表用来构建的样式是图片样式,那么既然有构建的样式,就会有使用样式的方法,即用什么引入样式。Google 提供了Spannable对象来引入各种样式。用法如下:

Editable edit_text = getEditableText();
        int index = getSelectionStart(); // 获取光标所在位置
        //插入换行符,使图片单独占一行
        SpannableString newLine = new SpannableString("\n");
        edit_text.insert(index, newLine);
        // 创建一个SpannableString对象,以便插入用ImageSpan对象封装的图像
        path = mBitmapTag + path + mBitmapTag;
        SpannableString spannableString = new SpannableString(path);
        // 根据Bitmap对象创建ImageSpan对象
        ImageSpan imageSpan = new ImageSpan(mContext, bitmap);
        // 用ImageSpan对象替换你指定的字符串
        spannableString.setSpan(imageSpan, 0, path.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        // 将选择的图片追加到EditText中光标所在位置
        if (index < 0 || index >= edit_text.length()) {
            edit_text.append(spannableString);
        } else {
            edit_text.insert(index, spannableString);
        }
好了,注释也写得很详细,核心代码就在这里。那么我宣布自定义图文混排EditText完成了。(当然不可能了)。还是有很多坑,需要带领大家一步一步淌过来的。

通常的逻辑是在空白的编辑框里逐步的输入文字,插入图片等。。这里带大家反着顺序走一遍。

首先,假设我们有一个集合,里面存储着编辑框里的内容,包括文字和图片地址。这个时候,要做的步骤是:

    /**
     
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值