gpt4 book ai didi

Android - 删除整个 ImageSpan 的一部分时删除它?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:26:23 26 4
gpt4 key购买 nike

我通过插入 ImageSpan 将图像添加到我的 edittext。我对跨度没有透彻的了解,但似乎我的 ImageSpan 需要包装一部分文本。因此,我向 EditText 添加了一些文本,并用我的 ImageSpan 将其包装起来,它看起来很好。但是,当我退格 ImageSpan 时,它只会删除文本的一个字符,而图像会一直保留到删除整个文本为止。我如何让它只用一个退格键删除?

SpannableStringBuilder builder = new SpannableStringBuilder();
builder.append(content.getText());

String imgId = "[some useful text]";

int selStart = content.getSelectionStart();

builder.replace(content.getSelectionStart(), content.getSelectionEnd(), imgId);

builder.setSpan(imageSpan, selStart, selStart+imgId.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
content.setText(builder);

最佳答案

一段时间后,我找到了解决方案。试试这个代码:

private TextWatcher watcher = new TextWatcher() {
private int spanLength = -1;

@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
if (start == 0) return;
if (count > after) {
ImageSpan[] spans = getEditableText().getSpans(start + count, start + count, ImageSpan.class);
if (spans == null || spans.length == 0) return;
for (int i = 0; i < spans.length; i++) {
int end = getEditableText().getSpanEnd(spans[i]);
if (end != start + count) continue;
String text = spans[i].getSource();
spanLength = text.length() - 1;
getEditableText().removeSpan(spans[i]);
}
}
}

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (spanLength > -1) {
int length = spanLength;
spanLength = -1;
getEditableText().replace(start - length, start, "");
}
}

@Override
public void afterTextChanged(Editable s) {
}
};

但是您应该像这样使用原始字符串创建 ImageStan:

ssb.setSpan(new ImageSpan(bmpDrawable, originalStr), x, x + originalStr.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

关于Android - 删除整个 ImageSpan 的一部分时删除它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23667293/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com