我正在使用SpannableStringBuilder在textview上设置文本,但是在不同的设备上却给我不同的结果。
这是spannableString构建器的代码
SpannableStringBuilder builder = new SpannableStringBuilder();
SpannableString first = new SpannableString("Directions to Send or Clear Alert:\n\n" +
"Option 1 of 2: To Send Alert, click the \"");
first.setSpan(new ForegroundColorSpan(Color.BLACK), 0, first.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
first.setSpan( new StyleSpan(Typeface.BOLD), 0, first.length()-27, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
SpannableString second = new SpannableString("Match / STOP!");
second.setSpan(new ForegroundColorSpan(Color.RED), 0, second.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
SpannableString third = new SpannableString("\" button next to the matching person.\n" +
"Option 2 of 2: To Clear Alert, you can choose either of these 2 options:\n");
third.setSpan(new ForegroundColorSpan(Color.BLACK), 0, third.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
third.setSpan( new StyleSpan(Typeface.BOLD), 38, 53, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
SpannableString third1 = new SpannableString("A) Click any of the \"");
third1.setSpan(new ForegroundColorSpan(Color.BLACK), 0, third1.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
third1.setSpan( new StyleSpan(Typeface.BOLD), 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
SpannableString four = new SpannableString("No Match / CONTINUE");
four.setSpan(new ForegroundColorSpan(Color.parseColor("#008000")), 0, four.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
SpannableString five = new SpannableString("\" buttons.\n" +
"B) Click on the \"X\" (clear) button at the top right of this message screen.");
five.setSpan(new ForegroundColorSpan(Color.BLACK), 0, five.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
five.setSpan( new StyleSpan(Typeface.BOLD), 11, 12, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
builder.append(first);
builder.append(second);
builder.append(third);
builder.append(third1);
builder.append(four);
builder.append(five);
headingTv.setText(builder);
在某些设备上,这样显示的文本是正确的,
但是在像google pixel2这样的某些设备中,它看起来像这样,太可怕了。
有人可以帮助我解决这个问题的原因吗?
答案 0 :(得分:1)
试一下
String first = "Directions to Send or Clear Alert:\n\n" + "Option 1 of 2: To Send Alert, click the \"";
String second = "Match / STOP!";
String third = "\" button next to the matching person.\n" + "Option 2 of 2: To Clear Alert, you can choose either of these 2 options:\n";
String third1 = "A) Click any of the \"";
String four = "No Match / CONTINUE";
String five = "\" buttons.\n" + "B) Click on the \"X\" (clear) button at the top right of this message screen.";
int blackColor = ContextCompat.getColor(mContext,R.color.black);
Spanned third1Spanned = setSpanColor(third1, blackColor);
headingTv.setText(TextUtils.concat(
first,
" " ,
second,
" " ,
third,
" " ,
third1Spanned,
" " ,
four,
" " ,
five));
public static Spanned setSpanColor(String s, int color) {
SpannableString ss = new SpannableString(s);
ss.setSpan(new ForegroundColorSpan(color), 0, s.length(), 0);
ss.setSpan(new StyleSpan(android.graphics.Typeface.BOLD),0,s.length(),SPAN_EXCLUSIVE_EXCLUSIVE);
return ss;
}
答案 1 :(得分:1)
我试图从complete语句中读取字符串的开始和结束位置,然后将其设置为Color或font style。
String completeStatement = "A) Click any of the No Match / CONTINUE";//complete statement /line
String search = "No Match / CONTINUE";
Pattern word = Pattern.compile(search);
Matcher match = word.matcher(completeStatement);
int start = -1;
int end = -1;
while (match.find()) {
start = match.start();
end = match.end();
}
SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(offerExpiredStatement);
spannableStringBuilder.setSpan(new android.text.style.StyleSpan(android.graphics.Typeface.BOLD),
start, end,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
spannableStringBuilder.setSpan(new ForegroundColorSpan(color), start, end, 0);
textView.setText(spannableStringBuilder);