安卓自定义布局管理器-儿童布局



我创建了一个从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的)子代放置得很好,但(MyLayouts的)孙代不在每个子代的内部。参数和值,如wrap_content、fill_present、layoutWeight,似乎没有得到正确处理。例如,MyLayout中的ViewSwitcher不显示其内容,具有fill_path的LinearLayouts(MyLayout的子项)的子项(MyLayouts的孙项)的大小为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

最新更新