且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何创建要在自定义布局上使用的自定义LayoutParams?

更新时间:2023-02-25 20:53:36

在您的自定义布局中,创建扩展ViewGroup.LayoutParams的嵌套类.然后覆盖一些方法(在我的示例中,所有必需的方法).这是我的一个自定义布局的精简版:

In your custom layout, create a nested class extending ViewGroup.LayoutParams. Then override some methods (all of the required ones are in my example). Here's a stripped-down version of one of my custom layouts:

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

        }

    }

}

进一步的解释:如何创建FlowLayout (感谢您的链接 Luksprog !)

Further explanation: How to create a FlowLayout (thanks for the link Luksprog!)