2013-10-24 8 views
18

(矢印を見て)私は自分のTextView内のいくつかのアイコンを配置する必要がありますが、それらは行の高さに合わない:フィットImageSpan

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です。 画像の解像度を下げようとしましたが、ぼやけて見える

+2

try myIcon.setBounds(0、0、50、20)または何か、20は本当に行の高さでなければなりません – pskink

答えて

27

画像の境界線をTextViewの線の高さに設定する必要があります。例:

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

もちろん、正方形の画像が必要な場合を想定しています。四角でない場合は、行の高さに基づいて幅の値を決定する必要があります。

0

テキストビューのドローラブルに含まれる高さを正しく設定するには、適切な境界を設定する必要があります。しかし、まず、正しく計算する必要があります。特にその高さ。

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

だから、私たちのイメージの上には、ascentFontMetricsIntの値とボトムを用いて整列される - bottom値で。