2015-05-31 7 views
7

समस्या: मान लीजिए हम साधारण मामला है: हम दृश्य है और हम इस दृश्य पर कुछ डेटा दिखाने के लिए किया है। हम ऐसा करने के लिए स्थिर विधि शोडाटा (दृश्य देखें) का उपयोग करते हैं। जब लेआउट को माप लिया जाता है तो मैं सटीक पल जानना चाहता हूं और मैं getWidth()getHeight() तक पहुंच सकता हूं और यह सुनिश्चित कर सकता हूं कि यह मेरे दृश्य की अंतिम चौड़ाई और ऊंचाई है।addOnLayoutChangeListener बनाम addOnGlobalLayoutListener बनाम पोस्ट (Runnable r)

मुझे क्या पता: (यकीन नहीं मैं सही 100% कर रहा हूँ):

मुझे क्या करना 3 विभिन्न दृष्टिकोणों जानते हैं कि यह

  • view.addOnLayoutChangeListener - हम जानते हैं कि लेआउट बदल गया है जब , हम ऊंचाई हो और चौड़ाई
  • view.getViewTreeObserver() addOnGlobalLayoutListener कर सकते हैं -। मेरे मामलेके लिए 0 लगभग वही है, लेकिन हमें बाद में जानकारी मिलती है। चूंकि लेआउट चेंज बच्चों से रूट तक बुलबुले, और वैश्विक स्तर से बच्चों से रूट (दाएं?)।
  • view.post (Runnable r) - काम कर रहा है, लेकिन मुझे नहीं पता कि क्यों चलने योग्य को मापने के बाद ui थ्रेड निष्पादन में पोस्ट किया गया है।

प्रश्न: सबसे अच्छा तरीका उस दृश्य को पता है मापा जाता है क्या है? और क्यों?

उत्तर

1

यह जानने के लिए सबसे अच्छा तरीका क्या है कि दृश्य को मापा जाता है?

सबसे अच्छा दृष्टिकोण? View.getMeasuredHeight() या View.getMeasuredWidth()

और क्यों साथ OnGlobalLayoutListener?

अपनी माँ आप बेहतर जानता है क्योंकि आप अपने आप को पता है की तुलना में है, इसलिए इसके बेहतर अपने राज्य, जो स्वत: बच्चों के बारे में संस्करणों बोलती है के बारे में ViewGroup परामर्श करने के लिए।

View.post() ui कतार पर प्रक्रिया को लागू करता है। Ui queue = {1,2}, बाद में आप उस पंक्ति को कॉल करने के बाद = {1,2, रननेबल}। तो निश्चित रूप से यह 1,2

+0

धन्यवाद के बाद चलाएगा :) लेकिन ऑनलाउट चेंज को मूल दृश्य समूह द्वारा भी बुलाया जाता है, तो OnGlobalLayoutListener बेहतर choise क्यों है? मैं View.post() के बारे में भी सोच रहा हूं। तो अगर मैंने विधि शोडाटा (व्यू व्यू) पर कॉल किया है और अगली पंक्ति view.post (Runnable r) है तो देखने के बाद रननेबल निष्पादित किया जाएगा और सटीक लेआउट है? मेरा मतलब है view.post (आर) शोडाटा (देखें वी) और मेजर के बीच नहीं हो सकता है? – comte1986

+0

जब आप किसी बच्चे को View.Gone पर कॉल करते हैं तो ViewGroupGlobalLayoutListener पर ट्रिगर करेगा जो ऑनलेआउट एक्सचेंज को कॉल कर सकता है, जब सीमाएं बदलती हैं, वैश्विक स्तर पर परिवार की स्थिति होती है, अगर कोई व्यक्ति को सूचित करता है, तो जब आप वस्तु एनिमेटर को एनिमेट करने के लिए उपयोग करते हैं यह दृश्य ट्रिगर किया जाएगा, केवल एक उदाहरण है, इसलिए यदि आप वास्तव में निगरानी करना चाहते हैं तो आपको इसका उपयोग करने की आवश्यकता होगी, और उन्हें अक्सर नहीं कहा जाता है, देखें।पोस्ट() जैसा मैंने कहा था, इसलिए यह मामला हो सकता है कि यह हमेशा प्रारंभिक परिभाषित कॉल के पीछे गिर जाएगा, @ comte1986 उम्मीद है कि इससे मदद मिलती है – Elltz

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