テキストビュー内にいくつかのアイコンを配置する必要がありますが、それらは行の高さに適合しません(矢印を見てください):
私はこれを試しました:
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です。画像の解像度を下げようとしましたが、ぼやけて見えます
画像の境界をTextViewの行の高さに設定する必要があります。例えば:
myIcon.setBounds(0, 0, t.getLineHeight(),t.getLineHeight());
もちろん、これは正方形の画像が必要であることを前提としています。正方形でない場合は、線の高さに基づいて幅の値を手動で決定する必要があります。
テキストビューのドローアブルに含まれる高さを正しくするには、適切な境界を設定する必要があります。しかし、最初に、それらを正しく計算する必要があります。特にその高さ。
いくつかの実験の結果、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
値を使用して配置されます。