2012-07-05 6 views
6

नहीं बदलता है मेरे पास कुछ दृश्यों के साथ एक कस्टम ViewGroup है।बल पर एक सबव्यू में लागू करें जिसका आयाम

किसी ईवेंट के जवाब में, एक अनुरोध लेआउट कहा जाता है और OnLayout में कुछ विचार एक नई लेआउट स्थिति प्राप्त करेंगे।

उनमें से एक अपनी स्थिति बनाए रखता है लेकिन अंदर पुन: व्यवस्थित करने की आवश्यकता है। हालांकि इस दृश्य की ऑनलेआउट विधि को कॉल नहीं किया जाएगा क्योंकि इसकी लेआउट स्थिति बदलती नहीं है। इस दृश्य में requestLayout, forceLayout या invalidate पर कॉल करने का प्रयास नहीं किया जाता है।

मुझे मिली एकमात्र गंदे चाल लेआउट परिवर्तन को मजबूर करने के लिए अपनी कुछ मूल्य स्थिति को बदलना है, लेकिन मुझे लगता है कि एक बेहतर तरीका होना चाहिए। तो, अब तक मैं कुछ (भयानक) करता हूं जैसे:

int patch = 0; 
    @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { 
     ... 
     _myView.patchedLayout(patch); 
     _myview.layout(l1, t1 , r1, t1+patch); 
     patch = (patch+1) % 2; 
     ... 
    }  

एक ही परिणाम को बेहतर तरीके से प्राप्त करने का कोई तरीका?

उत्तर

4

मैं अंत में समाधान मिल गया:

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
    ... 
    _myview.measure(widthMeasureSpec, heightMeasureSpec); 
    ... 

यह देखने के निजी क्षेत्र mPrivateFlags में LAYOUT_REQUIRED ध्वज सेट हो जाएगा तो यह कॉल करने के लिए बाध्य करेगा: मैं onMeasure ओवरराइड और मेरे विचार में mesure फोन करने के लिए सुनिश्चित करने की आवश्यकता है onLayout

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