2012-04-02 29 views
11

मेरे पास Android गतिविधि के बारे में कोई प्रश्न है। एक गतिविधि में विधि addContentView(View) है जबकि व्यू ग्रुप में (समान?) addView(View) विधि है। दुर्भाग्यवश इसके अनियंत्रित "जहां" addContentView से दृश्य रखा गया है। क्या यह LinearLayout की तरह है, बस नीचे देखें जोड़ रहा है? क्या यह FrameLayout की तरह है, जो इसके दृश्य "ऑनटॉप" जोड़ता है? क्या यह पर setContentView द्वारा सेट किया गया है? यदि मैं स्रोतों में गोता लगाता हूं तो मुझे लगता है कि addContentViewWindow का सार विधि addContentView पर कॉल करेगा। दुर्भाग्य से मैं नहीं देख सकता कि कौन सी कक्षा इस विधि को कार्यान्वित कर रही है। तो गतिविधि addContentView वास्तव में व्यवहार का क्या व्यवहार है?Activity.addContentView (देखें) == ViewGroup.addContentView (देखें)?

उत्तर

37

प्रत्येक गतिविधि का मूल लेआउट FrameLayout है। इसका अर्थ यह है कि आप जिस लेआउट को आमतौर पर setContentView() के माध्यम से सेट करते हैं वह इस लेआउट का एक बच्चा है। addContentView() सिर्फ एक और बच्चा जोड़ता है, इसलिए यह FrameLayoutजैसा व्यवहार करता है (जिसका अर्थ है कि यह मौजूदा वाले के ऊपर नए UI तत्व जोड़ता है)

आप अपने ANDROID_SDK\tools फ़ोल्डर से hierachyviewer नामक टूल का उपयोग कर इसे देख सकते हैं।

enter image description here

यह addContentView() कॉल करने से पहले लेआउट है, मेरे गतिविधि डिफ़ॉल्ट FrameLayout के होते हैं एक बटन (मेरे यहाँ लेआउट) के साथ एक LinearLayout पकड़े: यहाँ दो स्क्रीनशॉट कर रहे हैं। यह नीचे की पंक्ति में दिखाई देता है, उपरोक्त अन्य तत्व शीर्षक/स्टेटसबार हैं।

enter image description here

addContentView() के माध्यम से एक TextView जोड़ने के बाद यह इस तरह दिखता है। आप देख सकते हैं कि आधार फ्रेमलाउट को एक नया बच्चा मिला है।

+3

वाह। वास्तव में आपके उत्तर की सराहना करते हैं, धन्यवाद। आपकी टिप और आपके द्वारा सुझाए गए टूल से मुझे बहुत सारे घंटे बचाएंगे! आप ऐसे उपयोगकर्ता हैं जो स्टैक ओवरफ्लो को इतना महान बनाता है! –

+0

महान जवाब! समर्थन! 'Hierachyviewer' के लिए –

+1

+1 – RootCode

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