2012-08-15 29 views
12

ViewGroup tabanlı karmaşık özel düzenler oluşturma konusunda oldukça yetenekliyim. Eksik olan tek şey, özel LayoutParams'ımı oluşturma yeteneğidir. Kenar boşluklarını elde etme yeteneğine gerçekten ihtiyacım var ve neden ebeveyne geçmek için başka ekstra paramlar yaratmıyoruz.Özel bir düzende kullanılacak özel bir LayoutParams nasıl oluşturulur?

Özel LayoutParam oluşturma ve bunu xml kullanarak nasıl kullanabilirim? Bir LinearLayout.LayoutParam kullanmayı denedim, ancak ebeveyn bir LinearLayout olmadığı için açıkça çöküyor. LayoutParams ile özel düzenlerde nasıl çalışabilirim?

Güncelleme:

Bir FrameLayout kullanarak ve düzenini kendim yapmayı onMeasure ve onLayout işlevlerini geçersiz kılma ile yapışmasını ediyorum Bugün itibarıyla. Bu FrameLayout.LayoutParams sağlar. Sanırım çocukların özel LayoutParam'ı desteklemesi gerekecek mi?

+2

bu bağlantıyı (FlowLayout hakkında son bölüm) Bkz: http://www.parleys.com/#st=5&id=2191&sl=38. – Luksprog

+0

Harika bağlantı! Mükemmel! – Jona

+0

Yukarıdaki bağlantı çalışmıyor. Bu yararlı olabilir: https://github.com/ApmeM/android-flowlayout –

cevap

19

Özel düzeninizde, ViewGroup.LayoutParams numaralı iç içe geçmiş bir sınıf oluşturun. Sonra bazı yöntemleri geçersiz kıl (gerekli olanların tümü benim örneğimde). İşte benim özel düzenlere birinin sadeleştirilmiş sürümleri bulunuyor:

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) { 

     } 

    } 

} 

fazla açıklama: How to create a FlowLayout (! Linke Luksprog için teşekkürler)

+0

@ Luksprog gönderisinde öldü! Diğerleri yardımcı bulabilir gibi bazı kod gönderme için teşekkürler! – Jona

İlgili konular