2012-08-15 10 views
12

ViewGroupに基づいて複雑なカスタムレイアウトを作成するのはかなり熟練しています。私が欠けているのは、私のカスタムLayoutParamsを作成する能力だけです。私は本当にマージンを得る能力が必要で、なぜ親に渡すために他の余分なパラメータを作成しないのですか?カスタムレイアウトで使用するカスタムLayoutParamsを作成するにはどうすればよいですか?

カスタムLayoutParamを作成してxml経由で使用するにはどうすればよいですか?私はLinearLayout.LayoutParamを使ってみましたが、親がLinearLayoutではないので、明らかにクラッシュしています。カスタムレイアウトでLayoutParamsを使用するにはどうしたらいいですか?

更新:

私はでframeLayoutを使用して、レイアウトを自分で行うことをonMeasureとonLayout機能をオーバーライドするにこだわってる今のところ。これはFrameLayout.LayoutParamsを提供します。チャイルドがカスタムLayoutParamをサポートする必要があると思いますか?

+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