from: http://labs.ywlx.net/?p=435
所谓图文并茂是指在一篇文章里,图片和文字互相陪衬,使内容丰富多彩。例如我们最常使用到的聊天工具,都是这样。其实实现这个功能很简单,只用有一些细节性的问题需要注意,现在让我们一起来学习。
如图,最后一条消息就是图片加文字,重要代码:
SpannableString spannable = new SpannableString(str);//str为初始的字符串
Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.icon);
ImageSpan imgSpan = new ImageSpan(bm);
spannable.setSpan(imgSpan, start, end, Spanned.
SPAN_EXCLUSIVE_EXCLUSIVE);//此处实现是吧spannable从start位开始到end位结束替换成imgSpan
最后只用把spannable给TextView设置上即可。
一个简单的图文并茂就实现了,这是在TextView上,但是如果在EditText上,我们就应该注意到很多的问题了:
第一,加上图片后需要能够输入文字;
第二,图片需要能够删除;
第三,图片需要加在光标所显示的位置;
贴出点击表情后程序所做的事:
EditText edit = (EditText)view.findViewById(R.id.edit_body);
int cursor = edit.getSelectionEnd();
String strSymbol = SmsConstant.ARR_BIAOQING[arg2];
edit.getText().insert(cursor, strSymbol);
SpannableString spannStr = new SpannableString(edit.getText());
int iResID = linear.getContext().getResources().getIdentifier(“biaoqing_”+arg2,
“drawable”, linear.getContext().getPackageName());
Bitmap bm = BitmapFactory.decodeResource(linear.getContext().getResources(), iResID);
ImageSpan imgSpan = new ImageSpan(bm);
spannStr.setSpan(imgSpan, cursor, cursor+strSymbol.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
edit.setText(spannStr);
edit.setSelection(cursor+strSymbol.length());
代码应该很好理解,
我们需要注意的是在setSpan()方法中,最后一个参数应该是Spanned.SPAN_EXCLUSIVE_EXCLUSIVE,这样才可以删除,
关于图片显示到光标的位置只用如上获取到光标的位置即可,
这个功能实现起来很简单,也容易理解,只是本人愚笨在第一次处理的时候遇到了一些比较头痛的问题,给大家一个友情提示,图文并茂的时候建议不要使用gif格式的图片,因为会有时出现无法显示光标的问题,但是实际效果不会收到影响,只是视觉效果会收到影响。
关于图文并茂基本就完成了,大家一起学习,一起进步。
{再贴个监听键盘事件的问题,若要对EditText监听键盘事件,大家(指部分监听事件失败的童鞋)首先会想到setonkeylistener,孰不只这样只能监听到物理键盘,无法监听到软键盘,实际上应该是 addtextchangedlistener。}