28

我需要在我的文本视图中放置一些图标,但它们不适合行高(查看箭头):

截图

我试过这个:

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。我试图降低图像分辨率,但它们看起来很模糊

4

2 回答 2

30

您需要将图像的边界设置为 TextView 的行高。例如:

myIcon.setBounds(0, 0, t.getLineHeight(),t.getLineHeight());

这当然假设您想要一个方形图像。如果不是正方形,那么您需要手动确定宽度值应该基于行高。

于 2014-03-06T13:47:17.577 回答
3

为了实现包含在 textview drawables 中的正确高度,您应该为它们设置适当的边界。但首先,我们必须正确计算它们。尤其是它的高度。

经过一些实验,我意识到课堂上的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

于 2016-04-29T10:16:43.363 回答