1

如果我只想为父视图设置布局并且仍想保留子视图的布局设置,我可以以某种方式阻止调用所有子视图的布局方法吗?

目前我调用 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);
  }

但是孩子仍然有:
左:0 上:0 右:0 下:0

编辑 2: 顺便说一句:上面的代码是 ViewGroup 的 onLayout 方法的内部代码。

4

2 回答 2

0

onLayout()您可以在扩展的 LinearLayout的方法中设置子项的宽度和高度。例如:

@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);
}
于 2012-04-13T12:03:55.363 回答
0

您的子视图没有被测量(因为您没有调用它们的 layout()),所以系统仍然认为它们是 0x0px。

Android 使用 2-pass 测量/布局系统。

查看开发人员文档以了解绘图/布局顺序是如何发生的:http: //developer.android.com/guide/topics/ui/how-android-draws.html

您可能想尝试调用他们的layout(),然后设置孩子的高度/宽度,然后调用requestLayout().

希望有帮助。

于 2012-04-17T02:28:49.270 回答