3

我有下面的代码片来将位图插入到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);
}
4

2 回答 2

3

这是由于在 setBounds 中设置的高度大于在活动早期创建可绘制对象的位图的高度。当这种情况发生时,似乎会发生两件事..

首先,如果尺寸只是略微(一旦我开始工作,我没有对此进行广泛测试,所以我不确定确切的数字)超过位图的大小,然后在跨度中添加一个大的空白空间,这个空白空间是与插入的位图大小相同。

其次,将 Drawable 的一个额外副本添加到 span 中,就在空白区域的正下方。

分辨率比较简单。确保在创建 Drawable 并调用 setBounds 之前,将用于创建 Drawable 的 Bitmap 设置为预期的最终大小。

这可能不适用于所有情况,但对我有用,希望对某人有所帮助。

于 2015-08-17T09:52:47.833 回答
0

我还注意到如果可跨字符串有换行符,图像会重复。

于 2020-06-25T07:36:37.277 回答