如果我只想设置父视图的布局并且仍想保留子视图的布局设置,我可以以某种方式阻止调用所有子项的Layout方法吗?
目前我调用parent.layout(),其所有子节点的宽度都为零。我不能以某种方式将孩子设置为FillParent而不是将布局设置为ALL吗? : - (
顺便说一句,我的父母是一个扩展的LinearLayout,主要包含Textviews。
修改
一些代码:
myLayout扩展了LinearLayout
myLayout.layout(left, top, right, bottom);
myLayout.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, 1));
for each child in myLayout do {
child.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
if (v instanceof TextView) {
((TextView) v).setGravity(Gravity.CENTER);
}
但孩子仍然有:
left:0 top:0 right:0 bottom:0
编辑2: 顺便说一句:上面的代码内部是ViewGroup的onLayout方法。
答案 0 :(得分:0)
您可以在扩展的LinearLayout的onLayout()
方法中设置子项的宽度和高度。例如:
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
int count = getChildCount();
for (int i = 0; i < count; i++) {
final View child = getChildAt(i);
// set width of every child to FILL_PARENT, and height to WRAP_CONTENT
child.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
}
}
我不知道为什么setGravity()
不适合你。可能是你设置引力不是为了孩子而是为了布局?我可以设定重力,例如在onLayout()
:
if (child instanceof TextView) {
((TextView) child).setGravity(Gravity.CENTER);
}
答案 1 :(得分:0)
您的子视图未被测量(因为您没有调用它们的布局()),因此系统仍然认为它们是0x0px。
Android使用2遍测量/布局系统。
查看开发人员文档,了解绘图/布局顺序的发生方式:http://developer.android.com/guide/topics/ui/how-android-draws.html
您可能想尝试调用他们的layout()
,然后设置子项的高度/宽度,然后调用requestLayout()
。
希望有所帮助。