我试图给字符串中的前两个单词赋予一些样式效果(如粗体,删除线)。 我这样做的方式受到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
的错误开始和结束(或者可能不是这样)...我仍然无法找到正确的开始和结束索引..任何人都可以帮我修复这个问题?谢谢。
答案 0 :(得分:0)
是的,你可以这样做。我这样做的方式(因为它是相对简单的东西)只是用HTML。所以你可以这样做......
TextView textView = (TextView) findViewById(R.id.textView);
textView.setText(Html.fromHtml("<b><strike>" + twoFirstWords
+ "</b></strike>" + restOfTheSentence));
CommonsWare有一篇很棒的博客文章,其中列出了您支持的所有标记here。
答案 1 :(得分:0)
好的,我们得出结论。感谢pskink!
我需要做什么,因此效果不适用于使用SPAN_EXCLUSIVE_EXCLUSIVE
的内容。如下所示:
span1.setSpan(new StyleSpan(Typeface.BOLD), 0, twoFirstWords.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);