आप चौड़ाई और ऊंचाई अपनी गतिविधि से पहले प्राप्त करना चाहते हैं उसके दृश्य पदानुक्रम में जोड़ा, मापा जाता है और इसे बाहर रखी आप getMeasuredWidth()
या getMeasuredHeight()
कॉल करने से पहले View
अपने आप पर measure()
फोन करना होगा है।
माप के बाद मापा चौड़ाई और ऊंचाई सेट की गई है (जो बदले में onMeasure()
पर कॉल करती है) वे इस बिंदु से पहले 0 वापस आ जाएंगे। आपको MeasureSpec
से measure(..)
पर आपूर्ति करना होगा जो आपकी आवश्यकताओं के आधार पर अलग-अलग होंगे।
MeasureSpecs कि बच्चों को कोई कमी लागू करने के लिए अनुमति देने के लिए खुद को
int widthMeasureSpec = MeasureSpec.makeMeasureSpec(*some width*, MeasureSpec.EXACTLY);
int heightMeasureSpec = MeasureSpec.makeMeasureSpec(*some height*, MeasureSpec.EXACTLY);
महत्वपूर्ण बिंदु की तरह लग रहे। (नई एपीआई में बदल दिया गया है)
चौड़ाई ऊपर में पारित या तो स्पष्ट px या
ViewGroup.LayoutParams.WRAP_CONTENT
या
ViewGroup.LayoutParams.FILL_PARENT.
इसका भी ध्यान देने योग्य है जब आपके विचार वास्तविक गंतव्य पदानुक्रम MeasureSpec कि पारित हो जाएगा में मापा जाता है लायक हो सकता है measure()
को पर ViewGroups
लेआउट तर्क के आधार पर कॉन्फ़िगर किया जाएगा। इसे पहली बार एक से अधिक कहा जा सकता है यदि पहली उपाय vals मान्य नहीं हैं जब इस मूल दृश्य समूह/इसके स्वयं के लेआउट constraits/किसी भी भाई बच्चे के विचारों की बाधाओं के संदर्भ में माना जाता है। viewGroup
measure()
पर कॉल करने के लिए measure()
पर कॉल करने के लिए मापने के आकार पर निर्भर किसी भी तर्क को लागू करने से पहले यह उपरोक्त समाधान से अंतिम measuredWidth & height
प्राप्त करने के लिए कठिन होगा (स्थिति के आधार पर), लेकिन सभी मामलों में मैंने उपर्युक्त तकनीक का उपयोग किया है उद्देश्य को फिट करें, लेकिन वे अपेक्षाकृत सरल हैं। यदि आपको वास्तव में संदर्भ में मापने की आवश्यकता है तो आपको शायद onLayout()
के बाद ऐसा करना चाहिए और स्पष्ट रूप से requestLayout()
में कोई भी परिवर्तन सेट कर दिया गया है।
आपको पहले उपाय() स्वयं को कॉल करना होगा - मेरा उत्तर – Dori