dya*_*cat 5 android image android-edittext
我通过插入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);
Run Code Online (Sandbox Code Playgroud)
过了一段时间,我找到了解决方案.试试这段代码:
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) {
}
};
Run Code Online (Sandbox Code Playgroud)
但是您应该使用原始String创建ImageStan,如下所示:
ssb.setSpan(new ImageSpan(bmpDrawable, originalStr), x, x + originalStr.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1047 次 |
| 最近记录: |