Android自定义布局管理器-子级布局

Android自定义布局管理器-子级布局,android,android-layout,android-linearlayout,fill-parent,Android,Android Layout,Android Linearlayout,Fill Parent,我已经创建了一个从LinearLayout派生的自定义布局管理器。(我实际上没有使用很多LinearLayout功能,但我不想关心所有的视图组抽象方法。)我只覆盖了 protected void onLayout(boolean changed, int l, int t, int r, int b) 方法,我在MyLayout.OnlLayout(…)中为其每个子级调用child.layout(…)。所有其他东西都是原始的线性布局。如果孩子是没有孩子(MyLayout的孙子孙女)的简单控件,

我已经创建了一个从LinearLayout派生的自定义布局管理器。(我实际上没有使用很多LinearLayout功能,但我不想关心所有的视图组抽象方法。)我只覆盖了

protected void onLayout(boolean changed, int l, int t, int r, int b)
方法,我在MyLayout.OnlLayout(…)中为其每个子级调用child.layout(…)。所有其他东西都是原始的线性布局。如果孩子是没有孩子(MyLayout的孙子孙女)的简单控件,它将工作正常,孩子将正确地放置在他们的父MyLayout中

当我将某些视图组(LinearLayout、ViewSwitcher等)的子视图用作MyLayout的子视图时,会出现问题。在这种情况下,(MyLayout的)孩子们被安置得很好,但(MyLayout的)孙子孙女们在每个孩子体内的位置却不好。似乎未正确处理参数和值,如换行内容、填充父项、布局权重。例如,MyLayout中的ViewSwitcher不显示其内容,填充父项的LinearLayout(MyLayout的子项)子项(MyLayout的孙子项)大小为0px,CompoundButton(MyLayout的子项)有时不显示其文本

MyLayout.onLayout中的child.layout(…)似乎正确设置了每个子级的大小和位置,但我需要调用其他一些方法来使每个子级中的布局正常工作(如果子级是带有子级的ViewGroup)。有没有类似的东西,或者我刚刚改变的布局应该很好


谢谢您的建议。

听起来您需要对每个孩子进行测量并调用measure()。如果子视图是视图组,而子视图是视图,则需要循环子视图并调用度量值(int,int)。然后,孩子们应该给孙子们打电话

请查看linearLayout源:

您还可以在测量后使用getMeasuredWidth()和getMeasuredHeight()