美文网首页
解析微信输入@某人效果实现

解析微信输入@某人效果实现

作者: 远方夕阳 | 来源:发表于2022-09-14 17:08 被阅读0次
    Screenshot_2022-09-14-14-00-15-45_e39d2c7de19156b.jpg

    首先看微信的效果

    当选中@的人的时候,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);
    }
    

    自定义实现的效果

    1、选择要at的人

    Screenshot_2022-09-14-14-21-24-01_0d77d35623cd3f9.jpg

    2、显示效果

    Screenshot_2022-09-14-14-21-52-97_0d77d35623cd3f9.jpg

    相关文章

      网友评论

          本文标题:解析微信输入@某人效果实现

          本文链接:https://www.haomeiwen.com/subject/hihlortx.html