EditText实现话题选择
来源:互联网 发布:苹果电脑数据恢复 编辑:程序博客网 时间:2024/06/05 04:33
微博话题可哟重复选择多个 但是优化之后每个话题只支持选择一次 禁止用户输入#
删除的时候以话题为整体进行删除
/**
* 给EditText设置删除监听事件
*
* @param v
* @param keyCode
* @param event
* @return
*/
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_DEL && event.getAction() == KeyEvent.ACTION_DOWN) {
//当为删除键并且是按下动作时执行
int selectionStart = etWriteSound.getSelectionStart() - 1;
int lastPos = 0;
for (int i = 0; i < topicBeanList.size(); i++) { //循环遍历整个输入框的所有字符
if ((lastPos = etWriteSound.getText().toString().indexOf(topicBeanList.get(i).getTopicName(), lastPos)) != -1) {
if (selectionStart != 0 && selectionStart >= lastPos && selectionStart <= (lastPos + topicBeanList.get(i).getTopicName()
.length() - 1)) {
String sss = etWriteSound.getText().toString();
String currentStr = sss.substring(0, lastPos) + sss
.substring(lastPos + topicBeanList.get(i).getTopicName().length()); //字符串替换,删掉符合条件的字符串
topicBeanList.remove(i); //删除对应实体
topicMap.clear();
for (int j = 0; j < topicBeanList.size(); j++) {
if (currentStr.contains(topicBeanList.get(j).getTopicName())) {
topicMap
.put(currentStr.indexOf(topicBeanList.get(j).getTopicName()), currentStr.indexOf(topicBeanList.get(j).
getTopicName()) + topicBeanList.get(j).getTopicName().length());
}
}
// 设置原有字符串的颜色
SpannableString spannableString = new SpannableString(currentStr);
for (Integer key : topicMap.keySet()) {
spannableString
.setSpan(new ForegroundColorSpan(Color.BLUE), key, topicMap.get(key), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
etWriteSound.setText(spannableString);
etWriteSound.setSelection(lastPos); //设置光标位置
return true;
}
} else {
lastPos += ("#" + topicBeanList.get(i).getTopicName() + "#").length();
}
}
}
return false;
}
添加的时候进行话题的遍历 将对应话题改变对应的颜色 设置点击事件等等
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (before == 0) {
if (TextUtils.equals(s.subSequence(start, s.toString().length()), "#")) {
etWriteSound.setText(s.subSequence(0, start));
etWriteSound.setSelection(start);
selectTopic();
}
}
}
@Override
public void afterTextChanged(Editable s) {
tvSoundWriteSize.setVisibility(View.VISIBLE);
soundSize = 200 - s.length();
// 获取输入数据的长度 对长度进行限制
tvSoundWriteSize.setText(String.valueOf(soundSize));
if (soundSize < 0) {
tvSoundWriteSize.setTextColor(Color.RED);
} else {
tvSoundWriteSize.setTextColor(Color.BLACK);
}
}
// 设置原有字符串的颜色
SpannableString spannableString = new SpannableString(currentText + addTopic);
for (Integer key : topicMap.keySet()) {
spannableString
.setSpan(new ForegroundColorSpan(Color.BLUE), key, topicMap.get(key), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
spannableString
.setSpan(new ForegroundColorSpan(Color.BLUE), currentText.length(), currentText.length() + addTopic.length(),
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
etWriteSound.setText(spannableString);
topicBeanList.add(new TopicBean(addTopic, topicBean.getTopicId()));
etWriteSound.setSelection(etWriteSound.getText().toString().length());
- EditText实现话题选择
- 仿新浪微博加#话题的EditText实现
- 实现单击EditText弹出日期选择框
- 简单的实现EditText点击实现日期选择弹框
- EditText 的光标选择
- 事件营销的话题选择之道
- Android 自定义view-仿新浪微博#话题#插入EditText
- 新浪微博插入话题后部分文字选中的js实现(控制鼠标指针位置/自动选择指定文本)
- 【话题讨论】作为伯乐,你如何选择‘千里马’?--MySQL DBA
- 【话题讨论】作为伯乐,你如何选择‘千里马’?--MySQL DBA
- AJAX的话题与简单实现
- swift实现微博@及#话题#功能
- EditText控件实现只读
- edittext实现弹出数字键盘
- EditText计数的实现
- EditText实现抖动效果
- TextWatcher实现一键清空EditText
- 实现MaterialDesign的EditText
- SQL Server 求指定日期的上季尾日的起始点(比如入参日2016-06-30,返回 2016-03-31 00:00:00.000)
- eclipse 设置 中文doc 失败原因
- Windows 10 + VS2013 编译 Caffe
- 开源框架——轻量级缓存框架——ACache(ASimpleCache)
- 关于考试报名系统,随机取准考证号的问题
- EditText实现话题选择
- 2015年最全的移动WEB前端UI框架
- java 知识点13
- ReactJS
- 注释禁止Format格式化
- SQL基础知识(一)
- Ubuntu 解析以逗号“,”分割数据的csv文件
- 【zzuliOJ】1922 - 棋子问题(bfs & 位运算)
- iOS 第三方框架大全