Android – 获取父布局的高度

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

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

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

所有这些方法返回0(零)作为结果。

我的主要要求是能够给一个视图的宽度是布局的宽度的一些%。

另外我不想使用标签。 我想通过代码来完成。

提前致谢。

Solutions Collecting From Web of "Android – 获取父布局的高度"

好。 我find了解决办法。 我们可以在活动中获得屏幕的方式是

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

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

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

推荐的做法是通过使用LayoutParams的layout_weight字段。 链接文本

特别是你应该使用:

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

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

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

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

尝试这样的事情:

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

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

 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(); . . } } 

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; } 

你很可能会早点调用getHeight() 。 确保在viewGroup.addView(view0)和/或setContentView(activity_main.xml)之后调用getParent().getHeight() setContentView(activity_main.xml) 。 这在过去发生在我身上,这固定了它。