2010-01-21 10 views
9

मुझे विजेट्स के शुरुआती लेआउट और मेरी गतिविधि में विचारों के आधार पर कुछ वस्तुओं को तैयार करने की आवश्यकता है। मैं इसे शुरुआती चरणों में करना चाहता हूं, आदर्श रूप से क्रेट और ऑनस्टार्ट पर। जब हम अग्रभूमि में नहीं होते हैं तो परिवर्तनों की संभावना को ध्यान में रखते हुए, उनमें से कुछ को रेज़्यूम में होने की आवश्यकता हो सकती है।एंड्रॉइड पहले लेआउट कब करता है?

तो मैंने जांच की कि क्या मैं माप सकता हूं कि मेरे विचार कैसे निर्धारित किए गए थे।

Log.d("MyApp", "w,h of X is " + findViewById(R.id.X).getWidth() + 
     "," + findViewById(R.id.X).getHeight()); 

मैं onCreate, onStart, और onResume में इस भाग गया। प्रत्येक बार जब मैं चौड़ाई, ऊंचाई के लिए 0,0 मिलता है। अगर मैं टचवेन्ट की प्रतीक्षा करता हूं तो मुझे लेआउट जानकारी मिलती है, इसलिए लेआउट तब तक किया जाता है।

मुझे आश्चर्य है कि जब तक मैं रेज़्यूम पर देख रहा हूं तब लेआउट सेट और अंतिम नहीं है। मुझे उम्मीद है कि विगेट्स पहले ही रखे जाएंगे और तब तक बेवकूफ बनेंगे।

उत्तर

4

लेआउट दृश्य पदानुक्रम द्वारा आवश्यकतानुसार किया जाता है।

जब आपका ऐप शुरू हो रहा है, तो यह onResume() के बाद कुछ समय होगा (क्योंकि आपकी खिड़की लाई जा रही है और स्क्रीन पर रखी गई है)।

लेआउट संचालन के बारे में पता लगाने के लिए सही तरीका विभिन्न दृश्य पदानुक्रम कॉलबैक के माध्यम से है - के रूप में "लेआउट" here के तहत दस्तावेज View.onSizeChanged() आदि:

+0

मैं onSizeChanged विधि पर एक स्टैक ट्रेस किया था और यह से आता है संदेश प्रेषण पाश। – Brian

+1

वहाँ एक स्थापित करने के लिए एक तरीका हो प्रतीत नहीं होता है उपवर्गीकरण बिना हैंडलर "onSizeChanged" है, जो दुर्भाग्यपूर्ण है, क्योंकि कुछ लेआउट कंस्ट्रक्टर्स जरूरत नहीं है। आप कुछ ऐसा करने के लिए बहुत काम करना चाहते हैं जो तुच्छ होना चाहिए। –

+1

@dpk आप ViewTreeObserver उपयोग कर सकते हैं ड्राइंग और लेआउट से संबंधित कॉलबैक का गुच्छा सेट और इस तरह देखने के उपवर्ग से बचने के लिए। –

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