让我们来说说我这样的评论: 嗨安德烈检查了这一点.....在该评论中,我想突出显示安德烈,但每当我改变值的安德列或当我删除单词的一个字符的跨度变化,问题是我正在使用spannableString.setSpan(new StyleSpan(Typeface.BOLD), indexOfAt, highlightName.length() + indexOfAt, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
,其中Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
接受中间的单词和删除单词,如何删除跨度当用户更改单词或删除单词的字符?删除范围内的文本时,跨度在Android中更改
回答
您需要注意编辑文本上的文本更改。 假设EditText
,您使用的是被命名为commentEditText
commentEditText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
String comment = editable.toString();
if (comment.indexOf('@') != -1) {
//Asumming the name string
String name = "Andrea";
int atIndex = comment.indexOf('@');
int endIndex = atIndex + name.length() + 1;
if (endIndex == -1 || endIndex > editable.length()) {
endIndex = editable.length();
}
if (comment.toLowerCase().contains(name.toLowerCase())) {
editable.setSpan(new StyleSpan(Typeface.BOLD), atIndex, endIndex, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
} else {
StyleSpan[] spannable = editable.getSpans(atIndex, endIndex, StyleSpan.class);
if (spannable != null && spannable.length > 0) {
for (int i = 0; i < spannable.length; i++) {
editable.removeSpan(spannable[i]);
}
}
}
}
}
});
您可以尝试TextWatcher这一点,只需添加TextWatcher你想上面实现的TextView并在
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
//Do some magic here
}
现在,只要用户类型或删除任何字符在收到你会得到一个回调在这种方法你可以重置你的跨度。
解释了基本的想法是得到一个文本改变的回调,这是在这里实现的。 –
如果您使用的是SpannableString
,则必须在每次更改时重新创建所有内容。
您可以删除跨度,但不能更改源(注释),因为SpannableString
源文本是不可变的。
我建议您在创建SpannableString
的评论的每一个变化,寻找名称和标记他们,然后如果评论改变你重复同样的事情与一个新的SpannableString
。由于评论规模较小,因此不存在任何性能问题。
如果你想有一个可变对象,你可以使用SpannableStringBuilder
,但它更复杂,并且不需要它。
如果你分享一些代码,我可以帮助更多 – MaanooAk
- 1. 跨度范围内的文本,从跨度轮廓偏移
- 2. 跨度范围内的自举跨度
- 3. jQuery“更改”事件在敲除范围内被删除
- 4. 如何在另一个跨度内更改跨度文本?
- 5. 我可以更改跨度文本android
- 6. 更改跨度文本?
- 7. 更改跨度文本
- 8. 更改跨度嵌套范围之外的跨度元素的属性
- 9. 删除范围和以下文本
- 10. 删除范围内的标签文本样式
- 11. 如何删除选定文本范围内的类属性?
- 12. jQuery更改跨度元素的文本
- 13. 删除范围
- 14. 删除MySQL中的范围
- 15. 如何在Android中删除Android中的点击范围?
- 16. Python:使用lxml在跨度范围外定位文本
- 17. 删除范围内的图表
- 18. 崇高文本Keybinds范围内未保存的更改
- 19. 用js更改跨度文本
- 20. 从Python3的unicode文本文件中删除一个unicode范围
- 21. MutationObserver在范围文本更改时不会触发
- 22. jQuery删除更大的范围?
- 23. 检测在跨度的文本中的更改
- 24. 更改的SharePoint范围在运行时
- 25. 如何在javascript中选定的文本周围删除类名称的范围
- 26. kinect深度相机的更改范围
- 27. 删除行范围
- 28. 当服务范围在服务内更改时更新HTML
- 29. 删除输入[范围]内线
- 30. 本地变量在超出范围时删除另一个变量的内存
小提琴或代码将有助于回答这个问题。 – Shuddh