Я использую этот пользовательский класс для форматирования каждого тега в TextView:
public class ExerciseRoundedBackgroundSpan extends ReplacementSpan {
private static int CORNER_RADIUS = 8;
private static int sBackgroundColor = Integer.MAX_VALUE;
private static int sTextColor = Integer.MAX_VALUE;
public ExerciseRoundedBackgroundSpan() {
super();
}
@Override
public void draw(Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, int bottom, Paint paint) {
RectF rect = new RectF(x, top, x + measureText(paint, text, start, end), bottom);
paint.setColor(getBackgroundColor());
canvas.drawRoundRect(rect, CORNER_RADIUS, CORNER_RADIUS, paint);
paint.setColor(getTextColor());
canvas.drawText(text, start, end, x, y, paint);
}
@Override
public int getSize(Paint paint, CharSequence text, int start, int end, Paint.FontMetricsInt fm) {
return Math.round(paint.measureText(text, start, end));
}
private float measureText(Paint paint, CharSequence text, int start, int end) {
return paint.measureText(text, start, end);
}
private int getBackgroundColor() {
if (sBackgroundColor == Integer.MAX_VALUE) {
sBackgroundColor = MyApplication.getInstance().getResources().getColor(R.color.exercise_tag);
}
return sBackgroundColor;
}
private int getTextColor() {
if (sTextColor == Integer.MAX_VALUE) {
sTextColor = Color.WHITE;
}
return sTextColor;
}
}
Он работает почти правильно, за исключением нескольких строк: как вы можете видеть на этом скриншоте, на красном прямоугольнике фонусечено и между строками (синий прямоугольник) нет пробела (я хочу пробел между строками):
Определение My TextView (очень просто):
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tags"
style="@style/ItemTags"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
И здесь метод разделения каждого слова и применения фона:
protected SpannableStringBuilder getSpannableStringBuilder(ArrayList<String> tags,
ItemExerciseAdapter.ViewHolder viewHolder) {
SpannableStringBuilder stringBuilder = null;
if (tags != null && tags.size() > 0) {
stringBuilder = new SpannableStringBuilder();
for (String tag : tags) {
String thisTag = " " + tag + " ";
stringBuilder.append(thisTag);
stringBuilder.setSpan(new ExerciseRoundedBackgroundSpan(),
stringBuilder.length() - thisTag.length(), stringBuilder.length(),
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
stringBuilder.append(" ");
}
}
return stringBuilder;
}
Не могли бы вы помочь мне решить эти проблемы, пожалуйста?
Большое спасибо, ребята!