Android:扩展布局中的Textview

时间:2012-03-26 23:09:49

标签: android layout view gravity layoutparams

如果我只想设置父视图的布局并且仍想保留子视图的布局设置,我可以以某种方式阻止调用所有子项的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方法。

2 个答案:

答案 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()

希望有所帮助。