我已经实现了自己的自定义ViewGroup
,其中包含零个或多个其他ViewGroup
。所有ViewGroup
和View
都是从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
置于其间时,为什么它不起作用?
编辑:OuterLayout
和InnerLayout
被夸大的XML。 ViewGroup
以编程方式添加到View
。
InnerLayout