首先看微信的效果
当选中@的人的时候,EditText里面填充 @东东娃,这个比较简单,但是有2个细节
1、按表情面板删除按钮或者中文键盘删除按钮的时候,会直接删除整个 @东东娃 这个整体
2、按英文键盘删除按钮的时候 是逐步删除 @东东娃 > @东东 > @东 > @ >
因此简单的通过setText("@东东娃") 就不太满足需求,因此我们需要自定义
CharacterStyle
废话不说上代码
1、比如合适的时候调用 appendAtSpan("@东东娃");
public void appendAtSpan(String atText){
Editable editable = messageEditText.getEditableText();
Spannable spannable = new SpannableString(atText);
spannable.setSpan(new TextImageSpan(), 0, atText.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
editable.insert(messageEditText.getSelectionStart(),spannable);
}
2、自定义文字Span
按表情面板删除按钮或者中文键盘删除按钮的时候,会直接删除整个 @东东娃 这个整体
package com.farsunset.hoxin.common.widget.span;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.text.style.ReplacementSpan;
public class TextImageSpan extends ReplacementSpan {
@Override
public int getSize(Paint paint, CharSequence text,int start,int end,Paint.FontMetricsInt fm) {
String spanText = text.subSequence(start,end).toString();
return (int) paint.measureText(spanText);
}
@Override
public void draw(Canvas canvas, CharSequence text,int start,int end, float x,
int top, int y, int bottom, Paint paint) {
String spanText = text.subSequence(start,end).toString();
canvas.drawText(spanText, x, y, paint);
}
}
3、一键删除整个整体
public void onDeleteEmoticonClicked() {
KeyEvent keyEventDown = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL);
messageEditText.onKeyDown(KeyEvent.KEYCODE_DEL, keyEventDown);
}
网友评论