我有下面的代码片插入位图到EditText
小部件。与Android 5。x,它工作得很好,但与Android 4。x,插入一个位图后会显示重复的图像。有人知道如何解决这个问题与Android 4.x?
insertPicIntoEditText(getBitmapSpannable(resized_bm, upload_uri));
private SpannableString getBitmapSpannable(Bitmap pic, String uri_string) {
SpannableString ss = new SpannableString(uri_string);
ImageSpan span = new ImageSpan(this, pic);
ss.setSpan(span, 0, uri_string.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
return ss;
}
private void insertPicIntoEditText(SpannableString ss) {
Editable et = mContentEditor.getText();
int start = mContentEditor.getSelectionStart();
et.insert(start, ss);
et.insert(start + ss.length(), "n");
mContentEditor.setText(et);
mContentEditor.setSelection(start + ss.length() + 1);
}
这是由于setBounds中设置的高度大于活动早期创建的可绘制的位图的高度造成的。当这种情况发生时,似乎会发生两件事。
首先,如果大小只是稍微(我没有广泛的测试,一旦我得到它的工作,所以我不确定确切的数字)超过位图的大小,那么一个大的空白空间被添加到跨度,这个空白空间的大小与插入的位图相同。
第二,一个额外的Drawable副本被添加到span中,就在空格的正下方。
决议相对简单。在创建Drawable并调用setBounds之前,确保用于创建Drawable的位图被设置为预期的最终大小。
这可能不是在所有情况下都有效,但对我有效,希望能对别人有所帮助。
我还注意到,如果可伸缩字符串有换行符,图像会重复。