1、當前示例中間的 "評論",使用SpannableStringBuilder實現,點擊評論會有高亮效果加粗,但再點擊其它Bar時無法恢復默認樣式。
2、因為SpannableString或SpannableStringBuilder中的效果是疊加的,恢復默認樣式需要先移除加粗樣式?spannable.removeSpan(樣式)。
3、示例代碼
// 樣式是疊加的,所以要清除之前的樣式????????????????????????????????????????????????????????????????????????????????????????????????? spannableStringBuilder.removeSpan(highlightSpanColor);
spannableStringBuilder.removeSpan(highlightSpanStyle);
private SpannableStringBuilder spannableStringBuilder;// 評論 默認樣式// 字體顏色ForegroundColorSpan defaultSpanColor = new ForegroundColorSpan(getResources().getColor(com.lstm.baselibrary.R.color.color_606266,null));// 字體大小AbsoluteSizeSpan defaultSpanSize = new AbsoluteSizeSpan(DisplayUtils.dp2px(getContext(), 15));// 字體樣式StyleSpan defaultSpanStyle = new StyleSpan(Typeface.NORMAL);// 評論 高亮樣式// 字體顏色ForegroundColorSpan highlightSpanColor = new ForegroundColorSpan(getResources().getColor(com.lstm.baselibrary.R.color.color_303133,null));// 字體樣式StyleSpan highlightSpanStyle = new StyleSpan(Typeface.BOLD); // 字體加粗// 評論數量 樣式// 字體顏色ForegroundColorSpan countColor = new ForegroundColorSpan(getResources().getColor(com.lstm.baselibrary.R.color.color_909399, null));// 字體大小AbsoluteSizeSpan countSize = new AbsoluteSizeSpan(DisplayUtils.dp2px(getContext(), 12));/*** 不同樣式拼接 默認樣式*/private void splicingDefaultTextStyle() {spannableStringBuilder = new SpannableStringBuilder(getText());// 評論spannableStringBuilder.removeSpan(highlightSpanColor); // 樣式是疊加的,所以要清除之前的樣式spannableStringBuilder.removeSpan(highlightSpanStyle);spannableStringBuilder.setSpan(defaultSpanColor, 0, 2, Spanned.SPAN_INCLUSIVE_INCLUSIVE); // 字體顏色spannableStringBuilder.setSpan(defaultSpanSize, 0, 2, Spanned.SPAN_INCLUSIVE_INCLUSIVE); // 字體大小spannableStringBuilder.setSpan(defaultSpanStyle, 0, 2, Spanned.SPAN_INCLUSIVE_INCLUSIVE); // 字體樣式// 評論數量spannableStringBuilder.setSpan(countColor, 2, getText().length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE); // 字體顏色spannableStringBuilder.setSpan(countSize, 2, getText().length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE); // 字體大小spannableStringBuilder.setSpan(defaultSpanStyle, 2, getText().length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE); // 字體樣式setText(spannableStringBuilder);}/*** 不同樣式拼接 高亮樣式*/private void splicingHighlightTextStyle() {spannableStringBuilder = new SpannableStringBuilder(getText());// 評論spannableStringBuilder.removeSpan(defaultSpanColor); // 樣式是疊加的,所以要清除之前的樣式spannableStringBuilder.removeSpan(defaultSpanStyle);spannableStringBuilder.setSpan(highlightSpanColor, 0, 2, Spanned.SPAN_INCLUSIVE_INCLUSIVE); // 字體顏色spannableStringBuilder.setSpan(defaultSpanSize, 0, 2, Spanned.SPAN_INCLUSIVE_INCLUSIVE); // 字體大小spannableStringBuilder.setSpan(highlightSpanStyle, 0, 2, Spanned.SPAN_INCLUSIVE_INCLUSIVE); // 字體樣式// 評論數量spannableStringBuilder.setSpan(countColor, 2, getText().length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE); // 字體顏色spannableStringBuilder.setSpan(countSize, 2, getText().length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE); // 字體大小spannableStringBuilder.setSpan(defaultSpanStyle, 2, getText().length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE); // 字體樣式setText(spannableStringBuilder);}