2016-02-19 15 views
6

उदाहरण के लिए, आप दोनों width और height programmaticaly के लिए कुछ देखने की OT परिवर्तन LayoutParamsWRAP_CONTENT करना चाहते हैं, यह somethong इस तरह दिखेगा:हम setLayoutParams का उपयोग क्यों करते हैं?

final ViewGroup.LayoutParams lp = yourView.getLayoutParams(); 
lp.height = ViewGroup.LayoutParams.WRAP_CONTENT; 
lp.width = ViewGroup.LayoutParams.WRAP_CONTENT; 

के रूप में मैं undestood पैरामीटर के लिए getLayoutParams रिटर्न संदर्भ है, इसलिए इस कोड होगा पर्याप्त हो, लेकिन मैं अक्सर उदाहरणों में देख और इतना है कि यह लाइनों के बाद, एक प्रकार है:

yourView.setLayoutParams(lp); 

और मुझे आश्चर्य है कि इस लाइन की बात क्या है। क्या यह सिर्फ बेहतर कोड पठनीयता के लिए है या ऐसे मामले हैं जब यह इसके बिना काम नहीं करेगा?

+0

मैं पठनीयता को वोट देता हूं। हालांकि, मैंने इन उदाहरणों को कभी नहीं देखा है जहां मौजूदा विचारों को गतिशील रूप से आकार दिया जाना है। मैं आम तौर पर सामग्री दृश्य में गतिशील रूप से जोड़े जाने वाले दृश्य देखता हूं। उन मामलों में, setLayoutParams की आवश्यकता है –

उत्तर

4

setLayoutParams()resolveLayoutParams() और requestLayout() भी ट्रिगर करता है, जो दृश्य को कुछ सूचित कर देगा, इसे रीफ्रेश करें। या हम यह सुनिश्चित नहीं कर सकते कि नए लेआउट पैरामीटर वास्तव में काम करते हैं।

public void setLayoutParams(ViewGroup.LayoutParams params) { 
    if (params == null) { 
     throw new NullPointerException("Layout parameters cannot be null"); 
    } 
    mLayoutParams = params; 
    resolveLayoutParams(); 
    if (mParent instanceof ViewGroup) { 
     ((ViewGroup) mParent).onSetLayoutParams(this, params); 
    } 
    requestLayout(); 
} 
+0

तो मूल रूप से हमें केवल तभी इसकी आवश्यकता होती है जब दृश्य पहले ही खींचा गया हो, और हमें इसे बाद में बदलना होगा? –

+0

हां। रनटाइम में मौजूद दृश्य पैरामीटर को बदलते समय इसे कॉल करें – sakiM

0

यह सुनिश्चित करने का कोई तरीका नहीं है कि getLayoutParams() द्वारा लौटाए गए लेआउटपैम में किए गए किसी भी बदलाव को सही ढंग से प्रदर्शित किया जाएगा। इसे एंड्रॉइड संस्करण द्वारा अलग किया जा सकता है। इसलिए यह सुनिश्चित करने के लिए कि दृश्य उन परिवर्तनों को अपडेट करेगा, आपको setLayoutParams() पर कॉल करना होगा।

0

आप setLayoutParams() का उपयोग नहीं करते हैं, अपने लेआउट सेटिंग जबकि View.onLayout() कहा जा प्रभावी होगा:


View.setLayoutParams स्रोतों कोड देखें।

यहाँ View.setLayoutParams()

public void setLayoutParams(ViewGroup.LayoutParams params) { if (params == null) { throw new NullPointerException("Layout parameters cannot be null"); } mLayoutParams = params; resolveLayoutParams(); if (mParent instanceof ViewGroup) { ((ViewGroup) mParent).onSetLayoutParams(this, params); } requestLayout(); }

के स्रोत कोड जैसा कि आप देख, requestLayout setLayoutParams में कहा जा सकता है है। यह दृश्य तुरंत फिर से रिलाउट होगा। ऑनलाउट भी कहा जाएगा।

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