2012-03-02 10 views
15

जब मैं बटन पर क्लिक करें, फ़ॉन्ट आकार सिकुड़ता है 12. करने के लिए हालांकि, परिणाम है:एंड्रॉयड: TextView ऊंचाई फ़ॉन्ट आकार सिकुड़ के बाद परिवर्तन नहीं करता है

enter image description here

main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <TextView 
     android:id="@+id/test" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textSize="40sp" 
     android:background="#80ff0000" 
     android:text="@string/hello" /> 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Button" /> 

</LinearLayout> 

जावा:

public class FontSizeTestActivity extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     final TextView text = (TextView) findViewById(R.id.test); 




     Button button1 = (Button) findViewById(R.id.button1); 
     button1.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 

       text.setTextSize(12); 
      } 
     }); 
    } 
} 

मैं कैसे श्री करते एनके टेक्स्ट की ऊंचाई देखें ताकि यह केवल वास्तविक फ़ॉन्ट को लपेट सके?

+0

मैं सिर्फ अपने कोड का परीक्षण किया और यह एकदम सही ढंग से काम करता है। एंड्रॉइड का कौन सा संस्करण आप उपयोग कर रहे हैं? – caiocpricci2

+0

मैंने एंड्रॉइड 3.2 और 4.0 – jclova

+0

पर परीक्षण किया है इनमें से कोई भी समाधान एंड्रॉइड के किसी भी संस्करण पर मेरे लिए काम नहीं करता है। T__________T – Magicode

उत्तर

5

अंत में, मैं कारण/समाधान !!!

यह Android 3.1+ के लिए एक ज्ञात बग

Issue 17343

Issue 22493

संभावित समाधान कर रहे हैं:

text.setText(text+"\n"); 

या

final String DOUBLE_BYTE_SPACE = "\u3000"; 
text.setText(text + DOUBLE_BYTE_SPACE); 
+1

मुद्दों पर बहुत अच्छा पता लगाएं। उल्लिखित \ u3000 या \ u2060 स्ट्रिंग के अंत में एक स्पेस या "बॉक्स" कैरेक्टर का उपयोग करना , डिवाइस फ़ॉन्ट के आधार पर। तो बस कुछ जोड़ना विश्वसनीय नहीं है। – Moritz

+0

मोरित्ज़ का जवाब अधिक सही है: "\ u200b" जोड़ना (यह कुछ उपकरणों के लिए टूटा हुआ बॉक्स नहीं बनाता है) – jclova

0

शायद दृश्य को देखने के लिए, अपना टेक्स्ट आकार बदलना, फिर View.VISIBLE पर काम करना होगा?

+0

नहीं, अभी भी वही है :( – jclova

0

main.xml फ़ाइल में टेक्स्ट व्यू आकार एंड्रॉइड: टेक्स्टसाइज = "40sp"। और साइड जावा में, बटन पर बदल मूल्य यहाँ

public void onClick(View v) { 

      text.setTextSize(12); 
     } 
1

क्लिक करें अमान्य बुला() या अमान्य का एक संस्करण() की कोशिश करो। Android डेवलपर डॉक्स से:

सार्वजनिक शून्य रद्द()

के बाद से: एपीआई स्तर 1 पूरे दृश्य अमान्य। यदि दृश्य दिखाई देता है, तो भविष्य में कुछ बिंदु पर ड्रॉ (android.graphics.Canvas) को कॉल किया जाएगा। इसे यूआई थ्रेड से बुलाया जाना चाहिए। गैर-यूआई थ्रेड से कॉल करने के लिए, postInvalidate() पर कॉल करें।

http://developer.android.com/reference/android/view/View.html#invalidate()

+0

यह पहली चीज है जिसकी मैंने कोशिश की, कोई किस्मत नहीं। – jclova

5
उपयोग करने के बजाय

:

final String DOUBLE_BYTE_SPACE = "\u3000"; 
text.setText(text + DOUBLE_BYTE_SPACE); 

बेहतर उपयोग:

final String DOUBLE_BYTE_WORDJOINER = "\u2060"; 
text.setText(text + DOUBLE_BYTE_WORDJOINER); 

अतिरिक्त जानकारी: शब्द योजक 0 चौड़ाई जगह नहीं है।

+1

यह "" n जोड़ने के दौरान मेरे लिए पूरी तरह से काम करता है "ऐसा नहीं किया। – tmanthey

+0

धन्यवाद, मैंने इसे पहले क्यों नहीं देखा? क्या इस बारे में एंड्रॉइड दस्तावेज में कोई नोट है? – deadfish

+0

यह वास्तव में काम नहीं कर रहा है। 2 समस्याएं होती हैं। अगर आप टेक्स्ट को सही संरेखित या केंद्र देखते हैं तो आप देखते हैं अधिकांश डिवाइसों पर "0 चौड़ाई" मिथक है। एंड्रॉइड 2.3.3 के साथ सैमसंग गैलेक्सी एस 2 पर यह दृश्य आयताकार के रूप में भी आया। – tmanthey

3

मैंने पाया कि चरित्र "\ u200b" जोड़ना एक टूटी हुई चरित्र के रूप में प्रकट नहीं होता है, और न ही यह एक सफेद जगह/लाइनब्रेक जोड़ता है।

"शून्य चौड़ाई स्पेस" अधिक जानकारी के लिए देखें: http://www.fileformat.info/info/unicode/char/200b/index.htm

+0

धन्यवाद! संघर्ष कर रहा था टूटी हुई पात्रों के साथ भी यह काम करता है। – Gu1234

22

तो, एक लंबी खोज के बाद मैं एक समाधान मिल गया है। हर बार जब आप पाठ सेट करें:

setText("I am a Text",TextView.BufferType.SPANNABLE); 

या अपने पाठ का आकार बदलने के बाद सिर्फ कार्य करें:

setText(getText(),TextView.BufferType.SPANNABLE); 
+0

बिल्कुल सही, यह सही समाधान है। वास्तव में सरल – Corbella

+0

अच्छा, स्वीकृत उत्तर – Farhan

+0

बहुत सरल, बहुत बेवकूफ। पहले से ही काफी समय बिताया है (मुझे लगता है कि बहुत ज्यादा), लेकिन आपने और बचा लिया है ... – kpower

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