2013-10-24 2 views
18

에 내 텍스트 뷰 안에 몇 가지 아이콘을 둘 필요가 있지만 행 높이 (화살표 보면) 맞지 않는 : screenshoot맞춤 ImageSpan 텍스트 뷰 라인 높이

내가이 시도 :

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

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

그래서 우리 화상의 상단 ascentFontMetricsInt 값 및 하부를 사용하여 정렬 - bottom 값.