我创建了一个自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)。是否有类似的东西,或者仅更改了onLayout的MyLayout应该可以正常工作?
感谢您的所有建议。
最佳答案
听起来您需要覆盖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#LinearLayout.onMeasure%28int%2Cint%29