图文混排 bug android,仿小米便签图文混排 EditText解决尾部插入文字bug

/**

* 将图片路径映射到Bitmap,再通过SpannableString 和 ImageSpan显示到EditText*/

private voidsetImageView() {//如果EditText中已经有相同资源的ImageSpan,则不再读取图片

ImageSpan imageSpan =getImageSpanFromExistence(imagePath);if (imageSpan != null) {

insertIntoEditor(imageSpan, imagePath);return;

}if (imagePath != null && (!imagePath.equals("null"))&& (!"".equals(imagePath))) {

insertIntoEditor(imagePath);/** 不再用缓存模式*/}

}/**

* 从当前的EditText获取ImageSpan,如果存在则返回否则返回Null

*

* @return*/

privateImageSpan getImageSpanFromExistence(String source) {

Editable edit=contentText.getText();

ImageSpan[] spans= edit.getSpans(0, edit.length(), ImageSpan.class);for(ImageSpan ip : spans) {int start =edit.getSpanStart(ip);int end =edit.getSpanEnd(ip);

String path=edit.toString().substring(start, end);

path= path.substring(5, path.length() - 5);if(source.equals(path)) {

Logg.D("find existed ImageSpan");return newImageSpan(ip.getDrawable(), ImageSpan.ALIGN_BASELINE);

}

}return null;

}/**

* 向光标位置插入ImageSpan,针对EditText已经有ImageSpan的情况

*

* @param ip

* ImageSpan

* @param path

* 路径*/

private voidinsertIntoEditor(ImageSpan span, String path) {if(("").length()+contentText.getText().length() >MAX_CONTENT){

Toast.makeText(getApplicationContext(), R.string.toast_reached_max_text, 2000).show();return;

}

SpannableString ss= new SpannableString("");if (span == null)throw new NullPointerException("span cant be null");

ss.setSpan(span,0, ("").length(),

Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

Editable et= contentText.getText();//先获取Edittext中的内容

int start =contentText.getSelectionStart();

et.insert(start, ss);//设置ss要添加的位置

contentText.setSelection(start + ss.length());//设置Edittext中光标在最后面显示

Logg.D("insertIntoEditor by using existed ImageSpan");

}/**

* 向光标位置插入ImageSpan,针对EditText没有图片的情况

*

* @param path

* 图片路径*/

private voidinsertIntoEditor(String path) {if(("").length()+contentText.getText().length() >MAX_CONTENT){

Toast.makeText(getApplicationContext(), R.string.toast_reached_max_text, 2000).show();return;

}

SpannableString ss= new SpannableString("");//不再用缓存模式//Bitmap bm = mEditorHelper.getImage(path);

Bitmap bm =PictureHelper.getImageFromPath(imagePath,

screenWidth* 0.7F, screenWidth * 0.7F, false, 100,

Editor.this, imgPadding, false);if (bm == null) {throw new NullPointerException("bm cant be null");

}

ImageSpan span= new ImageSpan(this, bm, ImageSpan.ALIGN_BASELINE);

ss.setSpan(span,0, ("").length(),

Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

Editable et= contentText.getText();//先获取Edittext中的内容

int start =contentText.getSelectionStart();

et.insert(start, ss);//插入图片到光标处//contentText.setSelection(start + ss.length());//设置Edittext中光标在最后面显示

Logg.D("insertIntoEditor by loading new");

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值