EditText实现@功能(一)

本文介绍如何在Android中实现在EditText中输入@字符,弹出好友选择界面,并实现选择好友后的内容更新及@内容的正确删除。通过TextWatcher监听EditText,分析@功能的开始符号、好友名字和结束符号,利用Unicode编码处理特殊结束字符。
摘要由CSDN通过智能技术生成

如标题所说, 今天要实现 @ 的效果, 明确要实现的效果边界:

  • 输入 @ 字符, 弹出一界面选择好友(监听回调)
  • 选择好友后更新 @ 的内容
  • 删除 @ 内容将一次删除 @+好友名 所有字符

废话不多说, 先上效果图:
在这里插入图片描述

效果图中我打开好友列表以延时500ms随机取名字代替:

	@Override
	public void triggerAt() {
   
	    mHandler.postDelayed(new Runnable() {
   
	        @Override
	        public void run() {
   
	            atTextWatcher.insertTextForAt(et, names[random.nextInt(names.length)]);
	        }
	    }, 500);
	}

下面说下具体的实现方法:

首先使用 TextWatcher 是毋庸置疑的, 通过分析微信 @ 功能, 发现 @张三 分为三部分:

  • 第一部分为@功能的开始符号 @ 字符
  • 第二部分为好友名字
  • 第三部分为@功能的结束符号 ’ ’
  • 注意: 通过分析微信中结束符号, 发现它并不是空格, 而是 unicode 编码为 8197 的字符, 该字符跟空格符长得一样但其实是两个东西

分析完思路就有了:

    1. 通过TextWatcher监听EditText
    1. 监听到内容增加一字符并且该字符为 @ 符号执行监听, 弹出选择好友界面, 并记录 @ 符号位置
    1. 当监听到删除一字符并且该字符为@功能结束符, 编码为 8197 的字符, 根据结束符位置往前找 @ 符号, 并移除之间的内容

实现:

  • 我定义了 AtTextWatcher 实现 TextWatcher, 来处理 @ 效果, 在onTextChanged中判断新增字符是否为 @ , 如果是执行回调 AtListener.triggerAt()方法(Activity 中实现此方法打开好友列表选择好友), 并记录 @ 字符的位置.
  • 外部选择好友完成后, 调用方法 AtTextWatcher.insertTextForAt("选择的好友名字") , 将好友名字和结束符号插入到记录的**@**符号后面
  • 监听删除 @字符串 的逻辑必须写在监听方法 beforeTextChanged 中, 因为执行该方法时删除的字符并未从EditText中移除, 可以拿到字符并判断是否是
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值