1.设计思路:

       定义2个按钮,一个插入图片,一个拍照。插入图片时,从系统相册拿到图片,紧接着将拿到的图片重命名保存到指定的手机的文件夹中。然后根据路径和你刚刚设置的文件名从文件夹中获取这张图片放到EditText中,以字符串形式保存到数据库(自动变成路径+文件名),最后要从数据库中拿数据出来,以正则表达式提取路径并替换为图片。拍照也是一样的原理。

2.代码:
onCreate()方法中:

//+_+_+_+_+_+_+_+_+_+_+_+_+_+_+插入图片的按钮事件+_+_+_+_+_+_+_+_+_+_+_+ImageButton btn_insert=(ImageButton)findViewById(R.id.insert_photo);btn_insert.setOnClickListener(new Button.OnClickListener() {//插入@Overridepublic void onClick(View v) {// TODO Auto-generated method stubIntent getImage = new Intent(Intent.ACTION_GET_CONTENT);getImage.addCategory(Intent.CATEGORY_OPENABLE);getImage.setType("image/*");startActivityForResult(getImage, 0x111);}});ImageButton btn_takePhoto=(ImageButton)findViewById(R.id.take_photo);btn_takePhoto.setOnClickListener(new Button.OnClickListener(){//拍照@Overridepublic void onClick(View arg0) {// TODO 自动生成的方法存根Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intent, 0x222);}});//+_+_+_+_+_+_+_+_+_+_+_+_+_+_+插入图片的按钮事件+_+_+_+_+_+_+_+_+_+_+_+//

onActivityResult()方法中:

//+_+_+_+_+获取图片+_+_+_+_+ContentResolver resolver=getContentResolver();EditText editText=(EditText)findViewById(R.id.content);if(requestCode==0x111&&resultCode==RESULT_OK){//requestCode=0x111是从相册获取。Uri originalUri=data.getData();Bitmap ori_bitmap = null;Bitmap ori_rbitmap = null;try {ori_bitmap=BitmapFactory.decodeStream(resolver.openInputStream(originalUri));ori_rbitmap=resizeimg.resizeImage(ori_bitmap, 300, 300);} catch (FileNotFoundException e) {// TODO 自动生成的 catch 块e.printStackTrace();}String sdStatus = Environment.getExternalStorageState();  if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) { // 检测sd是否可用  Log.i("TestFile","SD card is not avaiable/writeable right now.");                   } String name =Calendar.getInstance(Locale.CHINA).getTimeInMillis() + ".jpg";FileOutputStream FOut = null;    File file = new File("/sdcard/myImage/");  file.mkdirs();// 创建文件夹  String fileName = "/sdcard/myImage/"+name; //editText.setText(fileName);try {  FOut = new FileOutputStream(fileName);  ori_rbitmap.compress(Bitmap.CompressFormat.JPEG, 100, FOut);// 把数据写入文件  } catch (FileNotFoundException e) {  e.printStackTrace();  }finally {  try {  FOut.flush();  FOut.close();  } catch (IOException e) {  e.printStackTrace();  }  }String myPath=fileName;//接着根据存放的路径获取图片放到EditText中Log.w(myPath,"fileName");Toast.makeText(this, myPath, Toast.LENGTH_SHORT).show();SpannableString span_str = new SpannableString(myPath);Bitmap my_bm=BitmapFactory.decodeFile(myPath);Bitmap my_rbm=resizeimg.resizeImage(my_bm, 300, 300);ImageSpan span = new ImageSpan(this, my_rbm);span_str.setSpan(span, 0, myPath.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);Editable et = editText.getText();// 先获取Edittext中的内容int start = editText.getSelectionStart();et.insert(start, span_str);// 设置ss要添加的位置editText.setText((CharSequence)et);// 把et添加到Edittext中editText.setSelection(start + span_str.length());// 设置Edittext中光标在最后面显示}if(requestCode==0x222&&resultCode==RESULT_OK){//requestCode=0x222是拍照String sdStatus = Environment.getExternalStorageState();  if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) { // 检测sd是否可用  Log.i("TestFile","SD card is not avaiable/writeable right now.");                   } String name =Calendar.getInstance(Locale.CHINA).getTimeInMillis() + ".jpg";//给拍的照片命名,下面进行存储Bundle bundle = data.getExtras();  Bitmap camera_bitmap = (Bitmap) bundle.get("data");// 获取相机返回的数据,并转换为Bitmap图片格式Bitmap camera_rbitmap=resizeimg.resizeImage(camera_bitmap, 300, 300);FileOutputStream FOut = null;    File file = new File("/sdcard/myImage/");  file.mkdirs();// 创建文件夹  String fileName = "/sdcard/myImage/"+name; try {  FOut = new FileOutputStream(fileName);  camera_rbitmap.compress(Bitmap.CompressFormat.JPEG, 100, FOut);// 把数据写入文件  } catch (FileNotFoundException e) {  e.printStackTrace();  }finally {  try {  FOut.flush();  FOut.close();  } catch (IOException e) {  e.printStackTrace();  }  }String myPath=fileName;//下面从文件夹中取出来放到EditText中去SpannableString span_str=new SpannableString(myPath);Bitmap my_bitmap=BitmapFactory.decodeFile(myPath);Bitmap my_rbitmap=resizeimg.resizeImage(my_bitmap, 300, 300);ImageSpan span=new ImageSpan(this,my_rbitmap);span_str.setSpan(span,0,myPath.length(),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);Editable et = editText.getText();// 先获取Edittext中的内容int start = editText.getSelectionStart();et.insert(start, span_str);// 设置ss要添加的位置editText.setText((CharSequence)et);// 把et添加到Edittext中editText.setSelection(start + span_str.length());// 设置Edittext中光标在最后面显示}//+_+_+_+_+获取图片+_+_+_+_+//

最后从数据库提取时需要调用一个解析的方法:

//+_+_+_+_+_+_+_+_+_+_+_+_+定义一个解析图片的方法+_+_+_+_+_+_+_+_public CharSequence analyzeImage(String content){String my_content=content;SpannableString span_str=new SpannableString(content);Pattern p=Pattern.compile("chemming/sdcard/myImage/[0-9]{13}+.jpg");Matcher m=p.matcher(content);while(m.find()){String mypath=m.group();Toast.makeText(this, m.group(), Toast.LENGTH_SHORT);Bitmap bitmap=BitmapFactory.decodeFile(mypath);Bitmap rbitmap=resizeimg.resizeImage(bitmap, 300, 300);ImageSpan span=new ImageSpan(this,rbitmap);span_str.setSpan(span, m.start(), m.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);}return span_str;}//+_+_+_+_+_+_+_+_+_+_+_+_+定义一个解析图片的方法+_+_+_+_+_+_+_+_//

EditText实现图文混排,保存与解析(墨雪亲测)相关推荐

  1. Android图文混排-实现EditText图文混合插入上传

    前段时间做了一个Android会议管理系统,项目需求涉及到EditText的图文混排,如图: 在上图的"会议详情"中,需要支持文本和图片的混合插入,下图演示输入的示例: 当会议创建 ...

  2. EditText图文混排

    下面就具体说一下我遇到的问题,首先是EditText里面的图文混排问题,这个问题的难点就是三点: 1.怎么插图片 2.怎么保存插入的图片和文字 3.怎么解析回图片和文字 解决: 一.怎么插入图片 在这 ...

  3. android textview 添加图片大小,Android_Android中使用TextView实现图文混排的方法,向TextView或EditText中添加图像比 - phpStudy...

    Android中使用TextView实现图文混排的方法 向TextView或EditText中添加图像比直接添加文本复杂一点点,需要用到标签. 只有一个src属性,该属性原则上应该指向一个图像地址或可 ...

  4. android论文引用图片,Android自动解析html带图片,实现图文混排

    在android中,如何将html代码转换为text,然后显示在textview中呢,有一个简单直接的方法: Java textView.setText(Html.fromHtml(content)) ...

  5. 仿微信表情输入键盘(支持 Gif 表情图文混排 )

    作者 | PandaQ404 地址 | http://www.jianshu.com/p/fddca2b0a26b 声明 | 本文是 PandaQ404 原创,已获授权发布,未经原作者允许请勿转载 简 ...

  6. 【小松教你手游开发】【系统模块开发】图文混排 (在label中插入表情)

    本身ngui是自带图文混排的,这个可以在ngui的Example里找到.但是为什么不能用网上已经说得很清楚,比如雨松momo的http://www.xuanyusong.com/archives/29 ...

  7. 实现小程序的图文混排功能

    在小程序的开发过程中,小程序开发人员经常会遇到商品详情中图文混排的功能.这个时候要么考虑用WxParse.wxParse组件去解析.另一种是我们后台巧妙地利用数据结构实现图文混排的功能.后台系统的代码 ...

  8. iOS - 图文混排技术方案分享

    前言 不少同学在工作中都能遇到图文混排的需求.但是实现图文混排的技术方案有好几种,相应的方案优劣也有差别.今天和大家一起分享一下图文混排的技术方案以及我的选择. Demo和解析工具已经开源 GitHu ...

  9. NGUI-制作位图字体以及图文混排

    制作字体过程 首先得下载一个位图制作工具Bitmap font generator,可以点击这里下载 1.新建txt文件,输入字体里面包含的文字 2.保存为utf-8格式:点击文件另存为,选择编码格式 ...

最新文章

  1. 《JAVA 接口多继承》
  2. 智能车竞赛技术报告 | 双车接力组 - 东北大学 - 三好学生
  3. word2007-2010排版中解决段后插入分页符 新页首行空行问题
  4. 手机拍照功能的简单实现
  5. vue 点击渲染ajax,vue中在页面加载时发送ajax请求获取数据渲染不到页面上
  6. php curl 采集文件,curl获取远程文件内容
  7. tftp的安装、设置以及put、get传输实验
  8. Less(v3.9.0)使用详解—变量
  9. 基于深度学习的图像超分论文推荐
  10. 服务器与操作系统的区别是什么,服务器系统和普通用户操作系统有何区别
  11. mysql生成 my.cnf_mysql配置文件my.cnf一键生成工具
  12. 如何快速把多个mp4和m4a混合合并- 无需安装
  13. 服务降级(服务回退)
  14. Spark架构原理和生态系统
  15. 三星 android 自定义物理按键,新机皇驾到!三星Note10将取消物理按键,网友:这造型逼死强迫症...
  16. xlrd python读取excel 编码错误_python读取excel数据报xlrd.biffh.XLRDError错误原因
  17. 一个使用Ruby on Rails开发LBS网站的简单实例
  18. 安装JDK7和Tomcat8.5后,Tomcat服务启动不了
  19. 如何学习Linux驱动开发?
  20. 怒怼管理层被标注“永不录用”?腾讯辟谣,应届生回应已找到新工作

热门文章

  1. Linux查看MegaSAS raid卡缓存策略
  2. 你知道吗?除了迅雷,这几款下载神器也不错!
  3. 【近几天电脑经常蓝屏后重启,蓝屏时提供错误代码,本文是解决电脑蓝屏问题的记录,看到最后希望对大家有用。】
  4. windows远程桌面功能和粘贴拷贝功能
  5. python樱花树代码_用python绘制樱花树
  6. mov和mp4格式哪个好_如何快速做视频格式的转换
  7. 那些年我们踩过的Hive坑
  8. 正反斜杠的区别_正斜杠(/)和反斜杠(\)的区别
  9. uni-app打包后ios证书申请和ios应用市场发布(windows主机发布)
  10. 关于更新windows10 软件乱码