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 ドローアブルに含まれる正しい高さを実現するには、適切な境界を設定する必要があります。しかし、まず、それらを正しく計算する必要があります。特にその高さ。

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
);

したがって、画像の上部はascentvalue ofFontMetricsIntを使用して整列され、下部はvalue を使用して整列されbottomます。

于 2016-04-29T10:16:43.363 に答える