2013-10-24 5 views
18

को मैं अपने TextView अंदर कुछ प्रतीक लगाने की जरूरत है, लेकिन वे लाइन ऊंचाई (तीर को देखो) फिट नहीं है:फ़िट ImageSpan TextView लाइन ऊंचाई

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

myIcon.setBounds (0, 0, 50, 20) या कुछ कोशिश करें, 20 वास्तव में लाइन ऊंचाई होना चाहिए – pskink

उत्तर

27

आपको छवि की सीमाओं को टेक्स्ट व्यू की लाइन ऊंचाई पर सेट करने की आवश्यकता है। उदाहरण:

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

यह निश्चित रूप से मानता है कि आप एक वर्ग छवि चाहते हैं। यदि वर्ग नहीं है, तो आपको मैन्युअल रूप से निर्धारित करना होगा कि चौड़ाई मान लाइन ऊंचाई के आधार पर क्या होना चाहिए।

0

टेक्स्टव्यू ड्रॉबल्स में शामिल की गई सही ऊंचाई को प्राप्त करने के लिए आपको उन्हें उचित सीमाएं निर्धारित करनी चाहिए। लेकिन सबसे पहले, हमें उन्हें सही ढंग से गणना करना होगा। खासकर इसकी ऊंचाई।

कुछ प्रयोगों के बाद मुझे एहसास हुआ कि Paint कक्षा से FontMetricsInt फ़ील्ड उपयोगी हो सकती है।

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

तो, हमारी छवि के शीर्ष FontMetricsInt की ascent मूल्य और नीचे का उपयोग कर गठबंधन है - bottom मूल्य के साथ।

संबंधित मुद्दे