我试图给字符串中的前两个单词一些样式效果(如粗体,删除线)。
我的操作方式受此thread的启发。
String[] tokens = text.split(" ");
String twoFirstWords = tokens[0] + " " + tokens[1]; //two first words
String content = text.replaceFirst(twoFirstWords, " "); //the rest
SpannableStringBuilder builder = new SpannableStringBuilder();
SpannableString span1 = new SpannableString(twoFirstWords);
SpannableString span2 = new SpannableString(content);
span1.setSpan(new StyleSpan(Typeface.BOLD), 0, twoFirstWords.length(), Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
span1.setSpan(new StrikethroughSpan(),0, twoFirstWords.length(), Spanned.SPAN_EXCLUSIVE_INCLUSIVE );
span1.setSpan(new CustomTypefaceSpan("", fontFirst), 0, twoFirstWords.length(), Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
span2.setSpan(new CustomTypefaceSpan("", fontContent), 0, content.length(), Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
builder.append(span1);
builder.append(span2);
textView.setText(builder, TextView.BufferType.SPANNABLE);
基于上面的代码,我试图仅对前两个单词赋予BOLD和Strikethrough效果。但是,这些效果也适用于内容。
当我为字符串中的最后两个单词应用样式时,此代码可以正常工作,但使用第一个单词时仍会失败。我怀疑这是由于
.SetSpan
的开头和结尾错误引起的(或者可能不是这种情况)...我仍然对找到正确的开头和结尾索引仍然一无所知。任何人都可以帮助我解决此问题?谢谢。 最佳答案
是的,您可以这样做。我这样做的方法(因为它是相对简单的东西)就是HTML。所以你可以做这样的事情...
TextView textView = (TextView) findViewById(R.id.textView);
textView.setText(Html.fromHtml("<b><strike>" + twoFirstWords
+ "</b></strike>" + restOfTheSentence));
CommonsWare的博客文章很棒,列出了所有可以支持here的标签。