2012-08-15 11 views
12

मैं व्यू ग्रुप के आधार पर जटिल कस्टम लेआउट बनाने में काफी कुशल हूं। एकमात्र चीज जो मुझे याद आ रही है वह मेरे कस्टम लेआउट पैराम बनाने की क्षमता है। मुझे वास्तव में मार्जिन प्राप्त करने की क्षमता की आवश्यकता है और माता-पिता को पास करने के लिए अन्य अतिरिक्त पैरा क्यों नहीं बनाते हैं।कस्टम लेआउट पर उपयोग करने के लिए कस्टम लेआउट पैराम कैसे बनाएं?

मैं एक कस्टम लेआउटपैम बनाने और xml के माध्यम से इसका उपयोग कैसे कर सकता हूं? मैंने एक लीनियरलाउट का उपयोग करने की कोशिश की। लयआउट पैराम लेकिन यह स्पष्ट रूप से दुर्घटनाग्रस्त हो रहा है क्योंकि माता-पिता एक लीनियरलाउट नहीं है। कस्टम लेआउट पर लेआउट पैराम्स के साथ मैं कैसे काम कर सकता हूं?

अद्यतन:

अब तक मैं एक FrameLayout का उपयोग करने और onMeasure और onLayout कार्यों अधिभावी लेआउट अपने आप को ऐसा करने के लिए के साथ चिपके हुए हूँ। यह FrameLayout.LayoutParams प्रदान करता है। मुझे लगता है कि बच्चों को कस्टम लेआउटपाराम का समर्थन करना होगा?

+2

इस लिंक (FlowLayout के बारे में अंतिम भाग) देखें: http://www.parleys.com/#st=5&id=2191&sl=38। – Luksprog

+0

ग्रेट लिंक! उत्तम! – Jona

+0

उपरोक्त लिंक काम नहीं कर रहा है। यह सहायक हो सकता है: https://github.com/ApmeM/android-flowlayout –

उत्तर

19

अपने कस्टम लेआउट में, ViewGroup.LayoutParams को विस्तारित एक नेस्टेड क्लास बनाएं। फिर कुछ तरीकों को ओवरराइड करें (सभी आवश्यक मेरे उदाहरण में हैं)। यहाँ अपने कस्टम लेआउट में से एक की एक छीन नीचे संस्करण है:

public class MyLayout extends ViewGroup { 

    public MyLayout(Context context) { 

    } 

    public MyLayout(Context context, AttributeSet attrs) { 

    } 

    @Override 
    protected void onLayout(boolean changed, int l, int t, int r, int b) { 

    } 

    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 

    } 

    @Override 
    protected boolean checkLayoutParams(ViewGroup.LayoutParams p) { 
     return p instanceof LayoutParams; 
    } 

    @Override 
    protected LayoutParams generateDefaultLayoutParams() { 
     return new LayoutParams(); 
    } 

    @Override 
    public LayoutParams generateLayoutParams(AttributeSet attrs) { 
     return new LayoutParams(getContext(), attrs); 
    } 

    @Override 
    protected LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) { 
     return generateDefaultLayoutParams(); // TODO Change this? 
    } 

    public static class LayoutParams extends ViewGroup.LayoutParams { 

     public LayoutParams() { 

     } 

     public LayoutParams(int width, int height) { 

     } 

     public LayoutParams(Context context, AttributeSet attrs) { 

     } 

    } 

} 

आगे स्पष्टीकरण: How to create a FlowLayout (! लिंक Luksprog के लिए धन्यवाद)

+0

पोस्ट @Luksprog पर मृत था! कुछ कोड पोस्ट करने के लिए धन्यवाद क्योंकि अन्य इसे उपयोगी पा सकते हैं! – Jona

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