Android EditText中插入话题模块的删除处理方法
在 EditText 中添加话题 或者是 @某人 时
看起来挺简单,实际操作会有很多坑爹的问题
private String mTopic;
//光标保持在话题的末尾
mInputEdit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int selectonStart = ((EditText) v).getSelectionStart();
int lastPos = 0;
if (!TextUtils.isEmpty(mCommentName)){
if ((lastPos = mInputEdit.getText().toString().indexOf(mCommentName, lastPos)) != -1) {
if (selectonStart >= lastPos && selectonStart <= (lastPos + mCommentName.length())) {
mInputEdit.setSelection(lastPos + mCommentName.length());
}
}
}else {
if ((lastPos = mInputEdit.getText().toString().indexOf(mTopic, lastPos)) != -1) {
if (selectonStart >= lastPos && selectonStart <= (lastPos + mTopic.length())) {
mInputEdit.setSelection(lastPos + mTopic.length());
}
}
}
}
});
//删除话题 或者@某人
mInputEdit.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_DEL && event.getAction() == KeyEvent.ACTION_DOWN) {
//当为删除键并且是按下动作时执行
int selectionStart = mInputEdit.getSelectionStart();
int lastPos = 0;
if (!TextUtils.isEmpty(mCommentName)){
if ((lastPos = mInputEdit.getText().toString().indexOf(mCommentName, lastPos)) != -1) {
if (selectionStart != 0 && selectionStart >= lastPos && selectionStart <= (lastPos + mCommentName.length())) {
String sss = mInputEdit.getText().toString();
mInputEdit.setText(sss.substring(0, lastPos) + sss.substring(lastPos + mCommentName.length()));
mInputEdit.setSelection(lastPos);
return true;
} else {
lastPos += mCommentName.length();
}
}
} else {
if ((lastPos = mInputEdit.getText().toString().indexOf(mTopic, lastPos)) != -1) {
if (selectionStart != 0 && selectionStart >= lastPos && selectionStart <= (lastPos + mTopic.length())) {
String sss = mInputEdit.getText().toString();
mInputEdit.setText(sss.substring(0, lastPos) + sss.substring(lastPos + mTopic.length()));
list.remove(0);
mTopic = "";
mSelectTopic.setText("");
mInputEdit.setSelection(lastPos);
return true;
} else {
lastPos += mTopic.length();
}
}
}
}
return false;
}
});
Android EditText中插入话题模块的删除处理方法的更多相关文章
- Android EditText中插入图片并响应点击事件
EditText中插入图片基本就是两种方法: ,通过Html.fromHtml(..)来实现 [mw_shl_code=java,true]eText.append(Html.fromHtml(&qu ...
- SQL Server XML基础学习之<7>--XML modify() 方法对 XML 数据中插入、更新或删除
/*------------------------------------------------------------------------------+ #| = : = : = : = : ...
- 转载---SQL Server XML基础学习之<7>--XML modify() 方法对 XML 数据中插入、更新或删除
/*------------------------------------------------------------------------------+ #| = : = : = : = : ...
- 使用PreparedStatement向数据表中插入、修改、删除、获取Blob类型的数据
使用PreparedStatement向数据表中插入.修改.删除.获取Blob类型的数据 2014-09-07 20:17 Blob介绍 BLOB类型的字段用于存储二进制数据 MySQL中,BLOB是 ...
- sql server 还原数据库后,删除用户,提示数据库主体在该数据库中拥有架构,无法删除解决方法
将另一台服务器上的数据库备份文件,在现在用的这台服务器上还原之后,再创建相同的用户名,提示用户已存在 想将之前的用户先删除掉,却提示“数据库主体在该数据库中拥有架构,无法删除解决方法” 在网上找到方法 ...
- 在Android开发中,定时执行任务的3种实现方法
在Android开发中,定时执行任务的3种实现方法: 一.采用Handler与线程的sleep(long)方法(不建议使用,Java的实现方式)二.采用Handler的postDelayed(Runn ...
- Android项目中的各个模块框架设计
作为Android开发,现对项目开发中的各个模块搭建,梳理如下: Android UI框架,开发人员需要达到专家级 网络框架 浏览框架 图片加载框架 图片裁剪压缩工具类 客户端并发框架 线程池设计 ( ...
- 介绍nodejs中的path模块的几个方法
webpack中常用的: var path = require('path') 是nodejs中的path模块,介绍一下webpack中常用的几个path模块的方法: 应用node环境的时候,这个pa ...
- Android 代码中文字在手机上显示乱码问题解决方法
在学习Android过程中,用于测试时发现,代码中的中文在真机上会显示乱码, 网上查阅了些资料,参考如下: http://www.androidchina.net/3024.html http://b ...
随机推荐
- 关于 apue.h 的使用方法
unix中有很多地方使用到apue.h .apue.h是作者自己写的一个头文件,这个文件怎么用,晚上有很多方法,但是经过尝试大多不好用. 经过本人尝试,可以把src.3e.tar.gz 的代码解压到 ...
- Hyper-V~双网卡设置
Windows: Win10 有线网卡+无线网卡各一块 Hyper-V: 10.0.10240.16384 公司网络服务器180网段,公网192.168.0.*网段 家里网络:192.168.1.*网 ...
- 合并多个工作薄workbooks到一个工作薄workbook
微软示例教程 微软示例教程 Sub MergeAllWorkbooks() Dim SummarySheet As Worksheet Dim FolderPath As String Dim NRo ...
- 史上最全的java随机数生成算法分享(转)
这篇文章主要介绍了史上最全的java随机数生成算法,我分享一个最全的随机数的生成算法,最代码的找回密码的随机数就是用的这个方法 String password = RandomUtil.generat ...
- 【leetcode】两数之和
https://leetcode.com/problems/two-sum/ Example: Given nums = [2, 7, 11, 15], target = 9, Because num ...
- 使用"关键词"来整理自己的知识库
以前一直使用MyBase作为整理知识的工具,但是用到后来发现,当整理的知识越来越多时,树形目录的节点个数就会变得越来越庞大,层次越来越深,反而很难定位要查看或编辑的知识.最近发现使用"关键字 ...
- gitlab 安装
GitLab的安装方式 GitLab的两种安装方法: 编译安装 优点:可定制性强.数据库既可以选择MySQL,也可以选择PostgreSQL;服务器既可以选择Apache,也可以选择Nginx. 缺点 ...
- 利用php比较精确的统计在线人数的办法
利用php比较精确的统计在线人数的办法,注意这里所说的精确是指个数,如果需要精确在时间上,则需要根据实际情况调整代码中的有效时间.(自己没有写,从别人那拿过来的,先放着然后再研究)<?php// ...
- Spring入门
Spring可以做很多事情,它为企业级的开发提供了丰富的功能,但是这些功能的底层实现都依赖于它的两个核心特性, 也就是依赖注入(dependency injection, DI)和面向切面编程(asp ...
- Git 取消跟踪已版本控制的文件
http://www.cnblogs.com/cposture/p/git.html 转: Git 是一个很好的版本控制工具,当然驾驭起来相比 SVN 要稍微复杂一些.初入 Git,难免有一些问题.比 ...