Android - 获取父布局的高度

时间:2010-09-07 06:04:57

标签: android

我想确定我必须添加视图的父布局的可用高度和宽度。

我在布局上使用了很多方法,比如

  • layout.getHeight()
  • layout.getRootView()。的getHeight()

所有这些方法都返回0(零)。

我的主要要求是能够为视图提供宽度,该宽度是布局宽度的百分之一。

此外,我不想使用标签。我想通过代码来实现。

提前致谢。

6 个答案:

答案 0 :(得分:7)

确定。我找到了解决方案。我们在活动中获得屏幕高度的方式是

getApplicationContext()。getResources()。getDisplayMetrics()。heightPixels

但我仍然不知道如何获得父布局的像素尺寸?

答案 1 :(得分:5)

这里的问题是你在layoutmanager完成父布局之前尝试获取父高度/权重。在布局完成后,您只能获得父级维度。

执行您想要实现的目标的推荐方法是使用LayoutParams的layout_weight字段。 link text

特别要使用:

LayoutParams lp = new LinearLayout.LayoutParams(width, height,
weight);

layout_weight值可以是介于0.0到1.0之间的任何值。所以例如,如果我在parentLayout中有myButton,并且我希望myButton占据父布局的30%......我会使用类似的东西:

 myButton.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
                                               LayoutParams.WRAP_CONTENT,0.3));

所有子元素的layout_weight总和应为1.此外,layout_weight不应与视图的宽度或高度设置为LayoutParams.FILL_PARENT一起使用。

答案 2 :(得分:3)

尝试这样的事情:

view.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
    public void onGlobalLayout() {
        view.getHeight();
    }
  });

答案 3 :(得分:2)

以编程方式实现此方法的一种替代方法是使用以下方法:

public void onWindowFocusChanged(boolean b) { ...}

调用此方法时,布局过程已完成。因此,您可以正确获取父属性。

例如:

public class A extends Activity {
    LinearLayout parent;
    Button child;
    public void onCreate(Bundle b) {
        parent = (LinearLayout) findViewById(R.id.linear1);
        child = (Button) findViewById(R.id.button1);
        .
        .
    }

@Override
public void onWindowFocusChanged(boolean b) {
        LayoutParams lpc = child.getLayoutParams();
        lpc.width = parent.getWidth();
        child.postInvalidate();
        .
        .
    }
}

答案 4 :(得分:0)

OnCreate()方法中,如果您使用layout.getHeight()layout.getWidth(),则会返回0,而您可以按照以下步骤操作:

public void onClick(View v) {   
    // TODO Auto-generated method stub

             int layWidth = Layout.getLeft();
             int layHeight = Layout.getHeight();
         break;     
    }

答案 5 :(得分:0)

你很早就开始调用getHeight()。确保在getParent().getHeight()和/或viewGroup.addView(view0)之后调用setContentView(activity_main.xml)。这在过去发生在我身上,并修复了它。