1

我创建了一个从 LinearLayout 派生的自定义布局管理器。(我并没有真正使用太多 LinearLayout 功能,但我不想关心所有许多 ViewGroup 抽象方法。)我只覆盖了

protected void onLayout(boolean changed, int l, int t, int r, int b)

方法,我在 MyLayout.onLayout(...) 中为其每个孩子调用 child.layout(...) 。所有其他的东西都是原始的 LinearLayout。如果子级是没有子级的简单控件(MyLayout 的孙子级),它将正常工作,并且子级将正确放置在其父级 MyLayout 中。

当我将某些 ViewGroup(LinearLayout、ViewSwitcher、...)与子项作为 MyLayout 的子项一起使用时,就会出现问题。在这种情况下,孩子(MyLayout)放置得很好,但孙子(MyLayout)没有放在每个孩子里面。似乎 wrap_content、fill_parent、layoutWeight 等参数和值处理不正确。例如,MyLayout 中的 ViewSwitcher 不显示其内容,具有 fill_parent 的 LinearLayouts(MyLayout 的子级)子级(MyLayout 的孙级)的大小为 0px,CompoundButton(MyLayout 的子级)有时不显示其文本...

MyLayout.onLayout 中的 child.layout(...) 似乎正确设置了每个孩子的大小和位置,但我需要调用其他方法来使每个孩子的布局正常工作(如果孩子是有孩子的 ViewGroup)。是否有类似的东西或 MyLayout 刚刚更改 onLayout 应该可以正常工作?

感谢所有建议。

4

1 回答 1

3

听起来您需要覆盖 onMeasure 并对每个孩子调用 measure() 。如果您的孩子是视图组,而孙子是视图,那么您想要遍历孩子并调用 measure(int,int)。那么孩子们应该对孙子们采取措施。

看看linearLayout源: http ://www.grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.3.6_r1/android/widget/LinearLayout.java#线性布局.onMeasure%28int%2Cint%29

于 2012-01-05T16:31:57.213 回答