微博话题可哟重复选择多个 但是优化之后每个话题只支持选择一次 禁止用户输入#
删除的时候以话题为整体进行删除
/**
* 给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());