2013-10-24 11 views
18

Ich brauche ein paar Symbole in meinem Textview zu setzen, aber sie die Zeilenhöhe nicht passen (siehe Pfeile):Fit ImageSpan zu Textview Zeilenhöhe

screenshoot

Ich versuchte dies:

spannable.setSpan(new ImageSpan(context, entry.getValue(), ImageSpan.ALIGN_BOTTOM), Matcher.start(), matcher.end(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE); 
t.setText(spannable, BufferType.SPANNABLE); 

und diese:

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

und in beiden Fällen hatte ich das gleiche Ergebnis.

Ich halte das Symbol in/res/Zeichnungsordner, und seine Größe ist 75x75px. Ich habe versucht, die Bildauflösung zu verringern, aber sie sehen unscharf aus

+2

versuche myIcon.setBounds (0, 0, 50, 20) oder etwas, 20 sollte wirklich Zeilenhöhe sein – pskink

Antwort

27

Sie müssen die Grenzen des Bildes auf die Zeilenhöhe des TextView festlegen. ZB:

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

Dies setzt natürlich voraus, dass Sie ein quadratisches Bild haben möchten. Wenn nicht quadratisch, müssen Sie manuell bestimmen, wie der Wert der Breite auf der Höhe der Linie basieren soll.

0

Um die korrekte Höhe der in Textansicht enthaltenen Zeichen zu erreichen, sollten Sie die entsprechenden Grenzen setzen. Aber zuerst müssen wir sie richtig berechnen. Vor allem seine Höhe.

Nach einigen Experimenten erkannte ich, dass FontMetricsInt Feld von Paint Klasse kann nützlich sein.

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

So wird die Spitze unserer Bildausgerichtet ascent Wert von FontMetricsInt und den Boden mit - mit bottom Wert.