2011-08-31 15 views
10

मुझे विश्वास नहीं है कि यह मौजूद है, लेकिन दोबारा जांचना चाहता था। मैं एक टेक्स्ट व्यू के टेक्स्ट आकार को सेट करना चाहता हूं जैसे कि यह दी गई चौड़ाई, एकल रेखा के भीतर फिट होगा। उदाहरण:फिट करने के लिए एक दृश्य में स्केल टेक्स्ट?

<LinearLayout 
    layout_width="100dip" 
    layout_height="50dip"> 

    <TextView 
    layout_width="fill_parent" 
    layout_height="wrap_content" 
    textSize="fill" 
    text="fit me please!" /> 

</LinearLayout> 

धन्यवाद

उत्तर

11

आप TextUtils.EllipsizeCallback का उपयोग कर सकते हैं। जब पाठ को लंबित किया जाता है तो यह कॉलबैक टेक्स्टव्यू द्वारा किया जाता है। यहां आप वर्तमान से टेक्स्ट आकार को छोटा सेट कर सकते हैं।

संपादित करें: नहीं तो आप TextUtils.ellipsize इस तरह

while (mText != TextUtils.ellipsize(mText, textPaint, other params)) { 
    textpaint.setTextSize(textpaint.getTextSize() - 1); 
} 
+0

दिलचस्प एक! – user291701

+1

सावधान रहें .. यह सही विचार है, लेकिन getTextSize() PX देता है और setTextSize() डीआईपी लेता है। आप एक दूसरे को खिलाना नहीं चाहेंगे। एक स्वतंत्र चर में आकार का ट्रैक रखें .. –

+1

मैं टेक्स्ट ऑब्जेक्ट में टेक्स्ट ऑब्जेक्ट को टेक्स्टव्यूज़ पर सेट कर रहा हूं। जब मुझे सही आकार मिल जाए, तो तभी मैं इसे टेक्स्टव्यू पर सेट कर दूंगा। इसलिए मुझे इस विचार का उपयोग करने में कोई समस्या नहीं है। – Ronnie

0

तुम हमेशा जावा के साथ XML लेआउट परिभाषा को जोड़ सकते हैं और गतिशील रूप से पाठ के आकार को परिभाषित। आपको डुबकी इकाइयों से उपयोग की जाने वाली वर्तमान स्क्रीन के बारे में पिक्सेल घनत्व की जानकारी के लिए कुछ गणनाओं और संदर्भों की आवश्यकता होगी, लेकिन एक बार किया जाने पर, यह लगभग सभी मामलों के लिए आपकी समस्या का समाधान करने की गारंटी देनी चाहिए।

+0

हाय हाँ मैंने ऐसा करने के लिए कुछ लिखा है (यह थोड़ा बदसूरत है) उम्मीद कर रहा था एसडीके के एक नए संस्करण ने एक ही काम करने के लिए एक नया ध्वज जोड़ा होगा। – user291701

4

यह कस्टम समारोह में यह करना चाहिए, TextUtils.ellipsize का उपयोग कर ... उपयोग कर सकते हैं

public static void shrinkTextToFit(float availableWidth, TextView textView, 
            float startingTextSize, float minimumTextSize) { 

    CharSequence text = textView.getText(); 
    float textSize = startingTextSize; 
    textView.setTextSize(startingTextSize); 
    while (text != (TextUtils.ellipsize(text, textView.getPaint(), 
             availableWidth, TextUtils.TruncateAt.END))) { 
     textSize -= 1; 
     if (textSize < minimumTextSize) { 
      break; 
     } else { 
      textView.setTextSize(textSize); 
     } 
    } 
} 
+0

के साथ मैं इस दृष्टिकोण का उपयोग कर रहा हूं और मैं मैं इस डिवाइस में 'java.lang.StackOverflowError' प्राप्त कर रहा हूं: जीटी-आई 9 1 9 2, डी 5803, एपीआई 4.2.2, 4.4.4 के साथ – GuilhE

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