Я пытаюсь придать некоторый эффект стиля (например, полужирный, зачеркнутый) к первым двум словам в строке. То, как я это делаю, вдохновлено этим thread.Styling Two First Words With Spannable String
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 и зачеркивание только двух первых слов .. Однако эти эффекты также применяются к содержимому.
Этот код работал отлично, когда я применил стиль для двух последних слов в строке, но продолжаю терпеть неудачу при использовании первых слов. Я подозреваю, что это из-за неправильного начала и конца .SetSpan
(или, может быть, это не так) ... Я также до сих пор не знаю, как правильно найти индекс для начала и конца. Кто-нибудь может помочь мне исправить эту проблему? Спасибо.
попробуйте SPAN_EXCLUSIVE_EXCLUSIVE – pskink
omg. это работает .. спасибо. один взнос для вас :) в любом случае .. что означает EXCLUSIVE_EXCLUSIVE и EXCLUSIVE_INCLUSIVE? – Lynx
см. Http://stackoverflow.com/questions/16531555/what-is-the-difference-between-span-point-mark-and-span-mark-point – pskink