我有样式(例如,BackgroundColorSpan),我想将它设置为文本的多个部分。但是如果将BackgroundColorSpan等的相同实例分配给文本的其他部分,则样式会移动。
如,
Object HighlightStyle = new BackgroundColorSpan(Color.argb(255, 255, 215, 0));
TextView X = (TextView) findViewById(R.id.Text);
SpannableStringBuilder SpannableBuilder = new SpannableStringBuilder();
SpannableBuilder.append("1");
SpannableBuilder.setSpan(HighlightStyle, 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); // This is hilited
SpannableBuilder.append("2");
SpannableBuilder.setSpan(HighlightStyle, 1, 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); // This is hilited and 1 is no more hilited
SpannableBuilder.append("3");
SpannableBuilder.append("4");
SpannableBuilder.setSpan(HighlightStyle, 3, 4, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); // This is hilited and 1 and 2 are no more hilited
X.setText(SpannableBuilder);
// I want hilited 1,2,4 all at the same time
为什么我这样做?用户可以搜索某些文字,并突出显示该文字。
我想怎么做?所有文字都在一个TextView中。我有一个SpannableStringBuilder。我有一个方法将文本分成几部分 - String和Boolean。 String是part,Boolean表示文本是否匹配 - 应该是否为highligted。我只是将例如BackgroundColorSpan的实例传递给该方法,它应该应用于匹配的每个部分,但由于setSpan的行为,只突出显示最后一部分。
潜在解决方案:Style未实现.clone方法。我可以做一个解决方法,如序列化/反序列化它来创建新的实例,但这看起来真的像一个黑客。
是否有一些优雅的方法如何将相同的样式设置为文本的X部分?