Fit ImageSpan для высоты строки TextView
Мне нужно поместить некоторые значки внутри моего текстового представления, но они не соответствуют высоте строки (смотрите стрелки):
![screenshoot]()
Я пробовал это:
spannable.setSpan(new ImageSpan(context, entry.getValue(), ImageSpan.ALIGN_BOTTOM), Matcher.start(), matcher.end(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
t.setText(spannable, BufferType.SPANNABLE);
и это:
Drawable myIcon = c.getResources().getDrawable(R.drawable.myicon);
myIcon.setBounds(0, 0, myIcon.getIntrinsicWidth(), myIcon.getIntrinsicHeight());
spannable.setSpan(new ImageSpan(myIcon, ImageSpan.ALIGN_BASELINE), matcher.start(), matcher.end(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
t.setText(spannable, BufferType.SPANNABLE);
и в обоих случаях у меня был тот же результат.
Я сохраняю значок в папке /res/drawable, а его размер равен 75x75px.
Я попытался снизить разрешение изображения, но они выглядят размытыми.
Ответы
Ответ 1
Вам нужно установить границы изображения на высоту строки TextView. Например:
myIcon.setBounds(0, 0, t.getLineHeight(),t.getLineHeight());
Это, конечно, предполагает, что вы хотите квадратное изображение. Если не квадрат, вам нужно вручную определить, какое значение ширины должно быть основано на высоте линии.
Ответ 2
Чтобы достичь правильной высоты, включенной в чертежи textview, вы должны установить соответствующие границы. Но, во-первых, мы должны правильно их вычислить. Особенно его высота.
После некоторых экспериментов я понял, что поле FontMetricsInt
из класса Paint
может быть полезно.
Paint textPaint = new Paint();
//obviously, we have to set textSize into Paint object
textPaint.setTextSize(textSize);
FontMetricsInt fontMetrics = textPaint.getFontMetricsInt();
setBounds(
0,
fontMetrics.ascent,
widthForDrawable,
fontMetrics.bottom
);
Итак, верхняя часть нашего изображения выровнена с использованием значения ascent
FontMetricsInt
, а нижняя - с bottom
значением.