最近在做项目中有一个群组的聊天模块,没有引用第三方的及时通信。这个模块中包含了文字、表情、语音、上传文档、下载文档、上传图片、以及对图片的处理放大(这里的图片处理可以使用PhotoView的开源库,可以下载使用)等。点击打开链接
这些都还好只是在文本中增加了一个@某人的功能,还可以@多人并把最后@人对应的id传到服务器中,这种功能类似QQ,微信这中,一开始我在网上找这种功能但是这方面的开源出来的少之又少。于是就自己尝试着写,终于写出来了。现在我把写这个功能遇到的一些问题提出来,并把这个功能的demo也提出来,供大家参考与改进。先上一张图。
首先我们获取到EditText的控件id,在oncreat()方法里设置mEditText.setFilters(newInputFilter[]{ newMyInputFilter()});这里我们要创建MyInputFilter类实现InputFilter接口。这里实现这个接口就是为了监听在输入文本框里有@字符。贴出代码:
<span style="font-size:18px;"><pre name="code" class="java"> /**
* 识别输入框的是不是@符号
*/
private class MyInputFilter implements InputFilter {
@Override
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
if (source.toString().equalsIgnoreCase("@")
|| source.toString().equalsIgnoreCase("@")) {
goAt();
}
return source;
}
}
private void goAt() {
// StringBuffer tmp = new StringBuffer();
// 把选中人的id已空格分隔,拼接成字符串
// for (Map.Entry<String, String> entry : cidNameMap.entrySet()) {
// tmp.append(entry.getKey() + " ");
// }
Intent intent = new Intent(this, PersonActivity.class);
// intent.putExtra(PersonActivity.KEY_SELECTED, tmp.reverse().toString());
// intent.putExtra(PersonActivity.KEY_SELECTED, a);
startActivityForResult(intent,