2013-10-24 16 views
18

tôi cần phải đặt một số biểu tượng bên trong TextView của tôi, nhưng họ không phù hợp với chiều cao dòng (nhìn vào mũi tên):Fit ImageSpan để TextView đường cao

screenshoot

Tôi cố gắng này:

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

và điều này:

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

và trong cả hai trường hợp tôi đã có kết quả tương tự.

Tôi giữ biểu tượng trong thư mục/res/drawable và kích thước của nó là 75x75px. Tôi đã cố gắng giảm độ phân giải hình ảnh nhưng chúng bị mờ

+2

thử myIcon.setBounds (0, 0, 50, 20) hoặc một cái gì đó, 20 thực sự nên là chiều cao dòng – pskink

Trả lời

27

Bạn cần đặt giới hạn của hình ảnh ở chiều cao dòng của TextView. Ví dụ:

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

Tất nhiên điều này giả định bạn muốn có hình vuông. Nếu không vuông, thì bạn sẽ cần phải tự xác định giá trị chiều rộng nào nên dựa trên chiều cao dòng.

0

Để đạt được độ cao chính xác được đưa vào bản vẽ văn bản, bạn nên đặt giới hạn phù hợp. Nhưng trước tiên, chúng ta phải tính toán chúng một cách chính xác. Đặc biệt là chiều cao của nó.

Sau một số thử nghiệm, tôi nhận ra rằng trường FontMetricsInt từ lớp Paint có thể hữu ích.

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

Vì vậy, phía trên cùng của hình ảnh của chúng tôi được liên kết sử dụng ascent giá trị của FontMetricsInt và phía dưới - với giá trị bottom.

Các vấn đề liên quan