我在使用自定义 View 组和自定义 View 时遇到了一些问题。我已经为此进行了很多搜索,但是如果我错过了一些东西,请随时与我联系。是的,我已经在android dev网站上阅读了有关Views,ViewGroups,measure和layout的所有内容,但是我仍然很困惑,没有任何Java示例代码。

1)我的理解是 subview 需要实现onMeasure和onLayout。这是否意味着父级ViewGroup需要为其每个子级手动调用measure()和layout()?如果是这样,这些电话应该放在哪里?它们应该在Parent的onMeasure和onLayout方法中吗?如果是这样,那么开始整个递归过程的第一个measure()和layout()调用在哪里?

2)我看到可以使用类似于以下内容的方法来设置childview的布局参数。该代码是否应该放置在父 View 组的onLayout内?

CustomView cust = new CustomView(context);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.CENTER_HORIZONTAL, RelativeLayout.TRUE);
cust.setLayoutParams(params);

如果要设置一个MeasureSpec,是否要将它添加为此处的另一条规则?

3)是否可以创建CustomView的实例,然后从CustomViewGroup的代码内部将其添加到CustomViewGroup,如果可以,则应将此代码放入CustomViewGroup构造函数中吗?如果不是,是否只是了解您创建了ViewGroups,然后添加了来自不同外部类的所有子级?

4)练习在CustomViewGroup的onDraw()方法内为我的每个 subview 调用draw()是常见的吗?

现在,当我执行一些代码绘制一个圆时,它执行view的draw方法,但屏幕上实际上没有显示任何内容。当我将其添加到relativeLayout而不是我的customViewGroup时,我没有问题...所以我认为我缺少有关如何显示 View 组的关键内容。 (是的,我将ContentView设置为ViewGroup)。

提前致谢!

编辑:请不要显示XML,我正在用Java进行所有操作。

最佳答案

我建议您阅读这些slides并观看此video

10-07 22:37