Android自定义布局管理器 - 儿童布局

时间:2012-01-05 15:49:31

标签: android android-layout android-linearlayout fill-parent

我创建了一个派生自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应该运作良好?

感谢所有建议。

1 个答案:

答案 0 :(得分:3)

听起来你需要在每个孩子身上考虑测量和呼叫测量()。如果您的孩子是视图组并且孙子是视图,那么您希望循环遍历子项并调用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#LinearLayout.onMeasure%28int%2Cint%29