原始字符串:
Lorem ## ipsum ## dolar ## sit ## atem. Lorem ipsum dolar坐## atem ##.
格式化后:
Lorem #ipsum dolar #sit atem. Lorem ipsum dolar坐#atem.
但只有最后一个有我想要的Formating.见下图.
码
private voID format() { CharSequence text = editContent.getText(); MovementMethod movementMethod = editContent.getMovementMethod(); if ((movementMethod == null) || !(movementMethod instanceof linkMovementMethod)) { editContent.setMovementMethod(linkMovementMethod.getInstance()); } text = setSpanBetweenTokens(text, "##", new ForegroundcolorSpan(0xFF0099FF), new Underlinespan(), new ClickableSpan() { @OverrIDe public voID onClick(VIEw Widget) { Toast.makeText(getApplicationContext(), "click", Toast.LENGTH_SHORT).show(); } }); editContent.setText(text);}private static CharSequence setSpanBetweenTokens(CharSequence text, String token, CharacterStyle... characterStyle) { int tokenLen = token.length(); int start = text.toString().indexOf(token) + 1; int end = text.toString().indexOf(token, start); while (start > -1 && end > -1) { SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(text); for (CharacterStyle c : characterStyle) { spannableStringBuilder.setSpan(c, start, end, 0); } spannableStringBuilder.delete(end, end + tokenLen); spannableStringBuilder.delete(start - 1, start); text = spannableStringBuilder; start = text.toString().indexOf(token) + 1; end = text.toString().indexOf(token, start); } return text;}
编辑
我的最终解决方案
private voID format() { CharSequence text = editContent.getText(); MovementMethod movementMethod = editContent.getMovementMethod(); if ((movementMethod == null) || !(movementMethod instanceof linkMovementMethod)) { editContent.setMovementMethod(linkMovementMethod.getInstance()); } text = setSpanBetweenTokens(text, "##"); editContent.setText(text);}private static CharSequence setSpanBetweenTokens(CharSequence text, String token) { int tokenLen = token.length(); int start = text.toString().indexOf(token) + 1; int end = text.toString().indexOf(token, start); while (start > -1 && end > -1) { SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(text); spannableStringBuilder.setSpan(new ForegroundcolorSpan(0xFF0099FF), start, end, 0); spannableStringBuilder.setSpan(new Underlinespan(), start, end, 0); spannableStringBuilder.setSpan(new ClickableSpan() { @OverrIDe public voID onClick(VIEw Widget) { Log.d("DEBUG", "Click"); } }, start, end, 0); spannableStringBuilder.delete(end, end + tokenLen); spannableStringBuilder.delete(start - 1, start); text = spannableStringBuilder; start = text.toString().indexOf(token) + 1; end = text.toString().indexOf(token, start); } return text;}
解决方法:
为每个跨度传递不同的对象:
spannableStringBuilder.setSpan(c, start, end, 0);
您为每个跨度传递相同的对象:
new ForegroundcolorSpan(0xFF0099FF)
当span对象存在于spannableStringBuilder中时,它仅更改边界,而不是添加新的跨度.
总结以上是内存溢出为你收集整理的Android TextView格式多个单词全部内容,希望文章能够帮你解决Android TextView格式多个单词所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)