2012-03-23 13 views
6

मैं 3 टुकड़े के साथ एक लेआउट है:एंड्रॉयड टुकड़ा मिल चौड़ाई

<LinearLayout android:id="@+id/acciones" 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="horizontal"> 

<LinearLayout 
android:id="@+id/fragment1" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:layout_weight="1"> 

</LinearLayout> 


<LinearLayout 
android:id="@+id/fragment2" 
android:orientation="vertical" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:layout_weight="1"> 

</LinearLayout> 

<LinearLayout 
android:orientation="vertical" 
android:id="@+id/f3" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:layout_weight="1"> 

</LinearLayout> 

</LinearLayout> 

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

यह मैं अपने कस्टम TextView में क्या किया है है:

@Override 
protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec) { 
super.onMeasure(widthMeasureSpec, heightMeasureSpec); 

mMaxWidth = (float) (getMeasuredWidth()); 
} 
इस लाइन मैं तीन टुकड़े से चौड़ाई, न केवल एक है जो कस्टम TextView शामिल हो गया साथ

धन्यवाद।

उत्तर

25

आप textView की चौड़ाई को fill_parent होने में सक्षम होना चाहिए, इस मामले में यह आपके लिए रैपिंग करेगा। जब आप लेआउट भार का उपयोग कर रहे हों तो यह अक्षम होने के बाद आपको अपने लेआउट की चौड़ाई को मिलान_पैरेंट नहीं होना चाहिए।

के बाद से एंड्रॉयड के लेआउट प्रणाली का संबंध, आकार देखने के लिए साथ TextView चौड़ाई की स्थापना fill_parent जा करने के लिए करता है, तो वास्तव में यह पूरी स्क्रीन का समय लग (के रूप में अपने प्रश्न जिसका अर्थ प्रतीत होता है) में आता है कभी कभी रहस्यमय है निम्न करें:

डिफ़ॉल्ट रूप से अपनी टेक्स्ट व्यू चौड़ाई 0 पर सेट करें। अपनी गतिविधि का onCreate में, सामग्री दृश्य सेट करने के बाद:

findViewById(R.id.acciones).getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
    @Override 
    public void onGlobalLayout() { 
     final int fragmentWidth = findViewById(R.id.releventFragmentId).getWidth(); 
     if (fragmentWidth != 0){ 
      findViewById(R.id.yourTextViewId).getLayoutParams().width = fragmentWidth; 
     } 
    } 
}); 

शुरू में 0 पर TextView की चौड़ाई निर्धारित करके आप यह टुकड़े की चौड़ाई को बदलने से रोकने। फिर लेआउट होने के बाद आप रुचि रखने वाले किसी भी टुकड़े की चौड़ाई पाने के लिए दृश्य दृश्य वृक्ष पर्यवेक्षक का उपयोग कर सकते हैं (इसके मूल दृश्य को देखकर)। अंत में आप अपनी टेक्स्ट व्यू को सटीक चौड़ाई के रूप में सेट कर सकते हैं, जो बदले में आपके लिए रैपिंग करेगा।

ध्यान दें कि ऑन ग्लोबललायआउट को कई बार बुलाया जा सकता है और नियमित रूप से सभी विचारों को पूरी तरह से बाहर कर दिया गया है, इसलिए! = 0 चेक। आप यह सुनिश्चित करने के लिए शायद कुछ प्रकार की जांच भी करना चाहेंगे कि आप केवल एक बार टेक्स्ट व्यू की चौड़ाई निर्धारित करें, या अन्यथा आप एक अनंत लेआउट लूप में जा सकते हैं (दुनिया का अंत नहीं, बल्कि प्रदर्शन के लिए अच्छा नहीं है) ।

+0

शानदार स्पर्श बंदरहीन! यह पूरी तरह से काम किया है। मैंने अपने प्रश्न के समाधान को खोजने पर इतना समय बिताया है। बहुत बहुत धन्यवाद। महान ज्ञान! – gutiory

+0

+1 अच्छा जवाब। – Dharmendra

+0

मैंने इस श्रोता को जोड़ा है और यह मुझे मेरे टुकड़े की चौड़ाई और ऊंचाई देता है, लेकिन यह मेरी सामग्री को स्क्रीन में नहीं खींचता है, तो क्या आप इस समस्या से मदद कर सकते हैं –

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