2011-02-17 13 views
40

बढ़ जाती है यह TextView का ही विस्तार है। getTextSize() और setTextSize() ओवरराइड नहीं हैं, मैं उन तरीकों का विस्तार नहीं करता हूं। 1.6 में प्रोग्रामिंग, एपीआई स्तर 4.एंड्रॉयड TextView setTextSize गलत तरीके से पाठ का आकार

इस कोड में पाश का कारण बनता है आकार 1.5 से हर बार यह iterates, उदा गुणा किया जा करने के लिए अगर आकार शुरू में 200 getTextSize से पढ़ता है, तो setTextSize(size), कहा जाता getTextSize फिर से बुलाया वापस पढ़ता 300.

public void shrinkTest() { 
    float size = this.getTextSize(); 
    while (size > 8) { 
     this.setTextSize(size); 
     size = this.getTextSize(); 
    } 
} 

ऐसा क्यों है?

उत्तर

141

हे, मिश्रित इकाइयों की समस्या। थोड़ा सा counterintuitive लगता है, लेकिन यह एक आसान फिक्स है। डिफ़ॉल्ट विधि setTextSize(float) मान लिया गया है, जबकि getTextSize() विधि एक सटीक पिक्सेल आकार देता है आप, sp इकाइयों (बढ़ाया पिक्सल) डाल रहे।

आप वैकल्पिक setTextSize(TypedValue, float) का उपयोग कर, इसलिए जैसे करके इसे ठीक कर सकते हैं:

this.setTextSize(TypedValue.COMPLEX_UNIT_PX, size); 

यह सुनिश्चित करें कि आप एक ही इकाइयों के साथ काम कर रहे हैं कर देगा। नीचे की तरह TypedValue का उपयोग कर के आकार के साथ

19

setTextSize() और getTextSize() विभिन्न इकाइयों के साथ काम करते हैं। सेट() को पैरामीटर घनत्व-स्वतंत्र "स्केल किए गए पिक्सल" है, जबकि मिलता है() सादे पुराने पिक्सल देता है।

+2

पंच को पीटा। : पी – kcoppock

+4

हां, सोचा कि केवल मेरे साथ हुआ! अपने थोड़ा अधिक उपयोगी उत्तर के लिए एक उत्थान है ... –

3

पास इकाइयों:

TypedValue.COMPLEX_UNIT_PX // पिक्सल

TypedValue.COMPLEX_UNIT_SP // स्केल्ड पिक्सल

TypedValue.COMPLEX_UNIT_DIP // उपकरण स्वतंत्र पिक्सल

setTextSize (TypedValue.COMPLEX_UNIT_SP, 18)

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