2010-10-25 14 views
7

पर टेक्स्ट "ellipsized" ड्रा करें, मुझे कैनवास (कस्टम व्यू के) में टेक्स्ट खींचने की आवश्यकता है, और इसे अधिकतम चौड़ाई तक ट्रिम करने की आवश्यकता है, यदि आवश्यक हो तो अंत में एक इलिप्सिस जोड़ना। मुझे लगता है कि आप इसे टेक्स्ट व्यू के लिए कर सकते हैं, लेकिन मैं इसे कस्टम व्यू के ऑनड्रा() में एक बच्चे के दृश्य को जोड़ने के बिना करना चाहता हूं।कैनवास

क्या यह संभव है? मुझे पता है कि मैं स्ट्रिंग को माप सकता हूं, एक चरित्र को काट सकता हूं, फिर से माप सकता हूं, आदि जब तक कि यह सही आकार न हो .... और मुझे यकीन है कि और भी कुशल तरीके हैं ... लेकिन मैं पुनर्विचार से बचना चाहता हूं वह पहिया अगर मैं कर सकता हूँ।

उत्तर

16

TextUtils.ellipsize() पर एक नज़र डालें। मुझे लगता है कि यह वही है जो आप चाहते हैं। असल में आप बस इसे उपलब्ध स्थान की मात्रा बताते हैं और अन्य राज्य की जानकारी का उपयोग करके यह आपके लिए सही पाठ बना देगा। :)

+0

शांत, कि यह किया धन्यवाद – rob

+1

अच्छा होगा अगर आप पहले से कैसे आप इस लूटने पूरा किया पर कुछ कोड दिखा सकता है ... धन्यवाद। :) – Wesley

+2

क्या यह बहु-पंक्ति पाठ के लिए उपयोग किया जा सकता है? ऐसा लगता है कि केवल चौड़ाई के आधार पर सिंगल लाइन टेक्स्ट का समर्थन करता है। –

10

यहाँ एक उदाहरण है:

TextPaint textPaint = new TextPaint();//The Paint that will draw the text 
textPaint.setColor(Color.WHITE);//Change the color if your background is white! 
textPaint.setStyle(Paint.Style.FILL); 
textPaint.setAntiAlias(true); 
textPaint.setTextSize(20); 
textPaint.setTextAlign(Paint.Align.LEFT); 
textPaint.setLinearText(true); 

Rect b = getBounds(); //The dimensions of your canvas 
int x0 = 5;   //add some space on the left. You may use 0 
int y0 = 20;   //At least 20 to see your text 
int width = b.getWidth() - 10; //10 to keep some space on the right for the "..." 
CharSequence txt = TextUtils.ellipsize("The text", textPaint, width, TextUtils.TruncateAt.END); 
canvas.drawText(txt, 0, txt.length(), x0, y0, textPaint); 
+1

धन्यवाद प्रिय उदाहरण के लिए, आपने अपना समय बचाया !!!! –