ViewGroup中的ViewGroups中的视图

时间:2017-03-30 16:27:19

标签: android

我已经实现了自己的自定义ViewGroup,其中包含零个或多个其他ViewGroup。所有ViewGroupView都是从XML资源中膨胀的。省略一些琐碎的部分,代码看起来大致如下:

public class OuterLayout extends ViewGroup {
    public OuterLayout(Context context, AttributeSet attributes) {
        super(context, attributes);

        setWillNotDraw(false);
    }

    @Override
    public void onLayout(boolean changed, int l, int t, int r, int b) {
        int c = getChildCount(); View v;

        for(int i = 0; i < c; i++) {
            v = getChildAt(i);

            // in reality different values are calculated for each child
            v.layout(l, t, r, b);
        }
    }
}

public class InnerLayout extends ViewGroup {
    public InnerLayout (Context context, AttributeSet attributes) {
        super(context, attributes);

        setWillNotDraw(false);
    }

    @Override
    public void onLayout(boolean changed, int l, int t, int r, int b) {
        View v = findViewById(R.id.childView);

        // in reality different values are calculated for each child
        v.layout(l, t, r, b);
    }
}

public class ChildView extends View {
    @Override
    public void onDraw(Canvas canvas) {
        // do some drawing
    }
}

这里的最终问题是根本没有绘制ChildView,而InnerLayout是。{1}}。 onDraw中的ChildView方法根本没有被调用,但两个onLayout中的ViewGroup方法都是。我或多或少通过在onDraw中实施InnerLayout方法并调用所有draw的{​​{1}}方法来解决此问题,但我觉得这不是此问题的最佳解决方案可能最终导致其他问题,尤其是因为ChildView的{​​{1}}传递给Canvas

在开发的早期阶段,InnerLayout位于ChildView内部,工作正常。我的问题是,当ChildView置于其间时,为什么它不起作用?

编辑:OuterLayoutInnerLayout被夸大的XML。 ViewGroup以编程方式添加到View

InnerLayout

0 个答案:

没有答案