深知各位看官品性,所以先上图,然后再听我吹《我和图文混排不得不说的故事》系列之----没有故事!(为了死气沉沉的代码更有生气,我给各位看官下载的美女)
各位同道,时隔半年,我胡汉三又回来了!不是我不想来,实在是。。人在江湖,身不由己啊!总结一句话,一入码门深如海,从此节操是路人!(不发图就感觉无法表达我此刻丰富的内心)
这半年来,更证实了一句话:需求是永无止境的。在我们迈向成功的路上,需求才是最大的绊脚石。没有需求,我们就自由了!(失业了)。
如果要问我为什么这个界面这么丑,我只好说:因为小学,中学,高中的美术课都被语数外给占用了。。。
发几句牢骚,当真你就输了,哈哈。
正文:
现在对于大多数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完成了。(当然不可能了)。还是有很多坑,需要带领大家一步一步淌过来的。
通常的逻辑是在空白的编辑框里逐步的输入文字,插入图片等。。这里带大家反着顺序走一遍。
首先,假设我们有一个集合,里面存储着编辑框里的内容,包括文字和图片地址。这个时候,要做的步骤是:
/**