Android EditText中添图片(Spanned)后的定位问题
来源:互联网 发布:笔记本电脑测评软件 编辑:程序博客网 时间:2024/04/30 03:10
由于项目需要上传图片和文本~遇到一些问题
Android EditText中可以使用Html.from()方式给 文本框添加图片,
但是这种方式在引用Html.from()返回的Spanned后,无法在Editable中找到。
百度许久没有找到~
debug了好久,发现,EditText只保留ImageSpan,即EditText不保留Html.from()返回的对象
而是保留了一个转后后的新对象。所以使用Editable.getSpanStart 方法无法找到。
由于时间不足,所以没有图片。希望对大家有所帮组
下面贴代码,一个简单的管理类:
public class EditUploadBitmapManager {
List<String> bitmapPathList=new ArrayList<String>(); //图片路径
List<Object> spannedList=new ArrayList<Object>();
// http://blog.csdn.net/u010418593/article/details/9324101
EditText editText;
// ImageGetter imageGetter=new ImageGetter() {
//
// @Override
// public Drawable getDrawable(String source) {
// // TODO Auto-generated method stub
// // 获取本地图片
// Drawable drawable = Drawable.createFromPath(source);
// // 必须设为图片的边际,不然TextView显示不出图片
// drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
// // 将其返回
// return drawable;
// }
// };
public EditUploadBitmapManager(EditText editText) {
super();
this.editText = editText;
}
/**
* 添加图片
* @param bitpath
*/
public void addbitmap(String bitpath){
if(bitpath==null)
return;
int cursor=editText.getSelectionStart();
Editable editable=editText.getText();
SpannableString spannableString =new SpannableString(bitpath);
Drawable drawable = Drawable.createFromPath(bitpath);
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
//editable中只引用ImageSpan 需要创建一个ImageSpan替换到spannableString
ImageSpan spanned=new ImageSpan(drawable);
spannableString.setSpan(spanned, 0, bitpath.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
//添加ImageSpan 引用
spannedList.add(spanned);
editable.insert(cursor, spannableString);
bitmapPathList.add(bitpath);
}
/**
* 添加图片并换行
* @param bitpath 文件路径
*/
public void addbitmapln(String bitpath){
if(bitpath==null)
return;
int cursor=editText.getSelectionStart();//光标位置
Editable editable=editText.getText();
SpannableString spannableString =new SpannableString(bitpath);
Drawable drawable = Drawable.createFromPath(bitpath);
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
//editable中只引用ImageSpan 需要创建一个ImageSpan替换到spannableString
ImageSpan spanned=new ImageSpan(drawable);
//其实为将spannableString中的文字换成图片显示
spannableString.setSpan(spanned, 0, bitpath.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
//添加ImageSpan 引用
spannedList.add(spanned);
bitmapPathList.add(bitpath);
editable.insert(cursor,"\n");
//注意 editable 会将转换传入Span,所以引用传入的Span 无法在在后找出来,如Html.from()添加图片的方式无效
editable.insert(cursor, spannableString);
editable.insert(cursor,"\n");
}
// #--images-file_name--#
/**
* 根据占位符替换
* @param bitpath
*/
public void addbitmaplnBySize(String bitpath){
if(bitpath==null)
return;
String str="#--images-"+getFileName(bitpath)+"--#";
int cursor=editText.getSelectionStart();//光标位置
Editable editable=editText.getText();
SpannableString spannableString =new SpannableString(str);
Drawable drawable = Drawable.createFromPath(bitpath);
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
//editable中只引用ImageSpan 需要创建一个ImageSpan替换到spannableString
ImageSpan spanned=new ImageSpan(drawable);
//其实为将spannableString中的文字换成图片显示
spannableString.setSpan(spanned, 0, str.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
//添加ImageSpan 引用
spannedList.add(spanned);
bitmapPathList.add(bitpath);
editable.insert(cursor,"\n");
//注意 editable 会将转换传入Span,所以引用传入的Span 无法在在后找出来,如Html.from()添加图片的方式无效
editable.insert(cursor, spannableString);
editable.insert(cursor,"\n");
}
public static String getFileName(String pathandname){
int start=pathandname.lastIndexOf("/");
int end=pathandname.lastIndexOf(".");
if(start!=-1 && end!=-1){
return pathandname.substring(start+1,end);
}else{
return null;
}
}
/**
* 上传检查,去掉被删除的Span引用
*/
public void upLoadCheck(){
Editable editable= editText.getText();
for (int i = 0; i < spannedList.size()&&i>-1; i++) {
//span被删除了
if(editable.getSpanStart(spannedList.get(i))<0){
if(i>=bitmapPathList.size())
break;
bitmapPathList.remove(i);
--i;
}
}
}
/**
* 根据图片路径构造占位符,格式化文本
*/
public void formatTextByUrl(ArrayList<String> bitpath){
if(bitpath==null)
return;
Editable editable= editText.getText();
for (int i = 0; i < bitpath.size(); i++) {
String text=editable.toString();
String bitname="#--images-"+getFileName(bitpath.get(i))+"--#";
int start=text.indexOf(bitname);
SpannableString spannableString=new SpannableString(bitname);
Drawable drawable = Drawable.createFromPath(bitpath.get(i));
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
ImageSpan spanned=new ImageSpan(drawable);
spannableString.setSpan(spanned, 0,bitname.length() , Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
editable.replace(start, start+bitname.length(), spannableString);
}
}
public List<String> getbitmapPathList() {
return bitmapPathList;
}
public void setbitmapPathList(List<String> bitmapPathList) {
this.bitmapPathList = bitmapPathList;
}
public EditText getEditText() {
return editText;
}
public void setEditText(EditText editText) {
this.editText = editText;
}
}
- Android EditText中添图片(Spanned)后的定位问题
- spanned android
- Android中EditText后添加删除按钮后的实现
- android Edittext中插入图片!!!
- 采用Spanned在android View任意位置加图片效果
- Android EditText的问题
- cocos2d-x 中使用加减定位后的注意问题
- Android中EditText焦点问题
- Android EditText光标定位
- Android spanned SPAN_INCLUSIVE_INCLUSIVE SPAN_EXCLUSIVE_EXCLUSIVE
- android TextView和EditText中显示图片
- android TextView和EditText中显示图片
- android TextView和EditText中显示图片
- android TextView和EditText中显示图片
- android TextView和EditText中显示图片
- android开发EditText中添加图片
- android 在EditText中固定图片
- Android中EditText的setError文字不显示的问题
- mmap_min_addr
- Linux下网卡phy状态检测与控制
- adc 采样 校准
- 不错的安全书籍
- Camel路由构建过程
- Android EditText中添图片(Spanned)后的定位问题
- Android高薪面试题集
- UVA - 11774 Doom's Day (规律)
- 用MySQL创建数据库和数据库表
- Security
- git(含github)教程[0基础]
- 5.struts.xml配置常量和Action处理流程
- hud Fibonacci
- mysql 模糊查询