怎么使用Android实现EditText图文混合插入上传功能
这篇文章将为大家详细讲解有关怎么使用Android实现EditText图文混合插入上传功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
目前创新互联已为超过千家的企业提供了网站建设、域名、虚拟空间、绵阳服务器托管、企业网站设计、文水网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
前段时间做了一个Android会议管理系统,项目需求涉及到EditText的图文混排,如图:
在上图的”会议详情”中,需要支持文本和图片的混合插入,下图演示输入的示例:
当会议创建完成以后,保存数据到服务器,然后查看刚刚创建好的会议,如图:
一、明确需求
首先,点击”会议详情”文本框中,正常输入文本,然后点击左下角的图片图标,进入系统的相册用来选择一张图片并插入到文本框中,你还可以将光标停留在任意的文字中间,完成图片的插入,回退建即可以逐个删除文字,也可以删除图片。
二、实现思路
如果要在一个EditText中显示图片,首先得简单了解一下SpannableString和ImageSpan的使用。
在上面的图文混排的EditText中,虽然看到了生动的图文效果,但是实际上输出EditText的get Text().toString(),
其实是:"插入一张图片。再插入一张图片
。"。
也就是说,当我选择图片插入到EditText中时,虽然显示了该图片,但是插入进去的其实是这个图片的url。
当我保存这条记录时,传给服务器的值就是:"插入一张图片。
再插入一张图片。"
这部分代码如下:
1.点击图片按钮进入系统相册
/** * 图文详情页面选择图片 */ public void getImage() { intent = new Intent(Intent.ACTION_GET_CONTENT); intent.addCategory(Intent.CATEGORY_OPENABLE); intent.setType("image/*"); startActivityForResult(intent, 0); }
2.获取到该图片并调用接口将图片上传到服务器,上传成功以后获取到服务器返回的该图片的url
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK && requestCode == 0) { ContentResolver resolver = getContentResolver(); // 获得图片的uri Uri originalUri = data.getData(); bitmap = null; try { Bitmap originalBitmap = BitmapFactory.decodeStream(resolver.openInputStream(originalUri)); bitmap = ImageUtils.resizeImage(originalBitmap, 600); // 将原始图片的bitmap转换为文件 // 上传该文件并获取url new Thread(new Runnable() { @Override public void run() { insertPic(bitmap, 0); } }).start(); } catch (FileNotFoundException e) { e.printStackTrace(); } } }
3.通过执行insertPic()方法,获取到url并做一些处理,让其在edittext中显示
/** * 插入图片 */ private void insertPic(Bitmap bm, final int index) { AjaxParams params = new AjaxParams(); try { params.put("image", LeoUtils.saveBitmap(bm)); } catch (FileNotFoundException e) { e.printStackTrace(); } FinalHttp fh = new FinalHttp(); System.out.println("params=" + params.toString()); fh.post(HttpUrlConstant.UPLOAD_PIC, params, new AjaxCallBack