我需要在textview中放置一些图标,但它们不符合行高(请看箭头):
我试过了:
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。 我试图降低图像分辨率,但它们看起来很模糊
答案 0 :(得分:31)
您需要将图像的边界设置为TextView的线高。例如:
myIcon.setBounds(0, 0, t.getLineHeight(),t.getLineHeight());
这当然假设你想要一个方形图像。如果不是方形,则需要根据线高度手动确定宽度值。
答案 1 :(得分:0)
要获得包含在textview drawable中的正确高度,您应该设置它们适当的边界。但首先,我们必须正确计算它们。特别是它的高度。
经过一些实验后,我意识到来自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
值进行对齐。