android - 在 Android 4.x 中插入一个 ImageSpan 后,EditText 中出现重复图像

标签 android bitmap android-edittext imagespan

我有下面的代码 fragment ,用于将位图插入 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 中设置的高度大于在 Activity 早期创建的可绘制对象的位图的高度。当这种情况发生时,似乎会发生两件事..

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

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

解决方案相对简单。确保在创建 Drawable 和调用 setBounds 之前将用于创建 Drawable 的位图设置为预期的最终大小。

这可能并非在所有情况下都有效,但对我有用,希望对某些人有所帮助。

关于android - 在 Android 4.x 中插入一个 ImageSpan 后,EditText 中出现重复图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31421141/

相关文章:

android - 在 LinearLayout 中如何将 EditText 放在按钮上?

android - 从 Activity 类中重构 performCrop() 方法

c# - WebBrowser Html 文档到图像

c# - 在 C# 中读取 PPM 图像

android - Android 4 中编辑文本时隐藏软键盘

android - OnKeyListener 和 OnEditorActionListener 之间的确切区别是什么?

Android Vector Drawable <defs> 不支持。如何解决?

java - 缩放 Canvas 后位图质量丢失

java - 如何从弹出 Activity 中的单选组获取编辑文本中的值?

android - 在 Android 版本 7.0 上膨胀类 android.widget.DatePicker 时出错