版权声明:转载请注明出处:https://blog.csdn.net/zwjemperor https://blog.csdn.net/zwjemperor/article/details/7751913
添加图片:
ImageSpan imageSpan = new ImageSpan(this, bitmap);
SpannableString ss = new SpannableString("photo");
ss.setSpan(imageSpan, 0, "photo".length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
Editable editable = txtEdit.getEditableText();
int selectedIndex = txtEdit.getSelectionStart();
ss.getSpans(0, ss.length(), ImageSpan.class);
if (selectedIndex < 0)
editable.append(ss);
else
editable.insert(selectedIndex, ss);
响应图片点击:
private OnClickListener textListener = new OnClickListener()
{
@Override
public void onClick(View v)
{
//关闭软键盘
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(txtEdit.getWindowToken(), 0); Spanned s = txtEdit.getText();
imageSpans = s.getSpans(0, s.length(), ImageSpan.class);
int selectionStart = txtEdit.getSelectionStart();
for (ImageSpan span : imageSpans)
{
int start = s.getSpanStart(span);
int end = s.getSpanEnd(span);
if (selectionStart >= start && selectionStart < end)//找到图片
{
Bitmap bitmap = ((BitmapDrawable) span.getDrawable()).getBitmap();
viewPicture(bitmap);
return;
}
}
//打开软键盘
imm.showSoftInput(txtEdit, 0);
}
};
private void viewPicture(Bitmap bitmap)
{
if (bitmap == null)
return;
//将由图片生成Uri
Uri uri = Uri.parse(MediaStore.Images.Media.insertImage(getContentResolver(), bitmap, null, null));
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(uri, "image/*");
startActivity(intent);
}
搞定。。。
细心的同学会发现:if (selectionStart >= start && selectionStart < end)//找到图片
中selectionStart < end而不selectionStart < end,这是因为这里一张图片占据的text长度大于1(这里是"photo"的长度)。当点击图片时,selectionStart可能是两个值(start/end),点击左边时是start,点击右边时是end,在测试时我发现end=start+length,即end是指向下一个字符的。
表达得不是很清楚,见谅。。。