我想确定我必须添加视图的父布局的可用高度和宽度。
我在布局上使用了很多方法,比如
所有这些方法都返回0(零)。
我的主要要求是能够为视图提供宽度,该宽度是布局宽度的百分之一。
此外,我不想使用标签。我想通过代码来实现。
提前致谢。
答案 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)
。这在过去发生在我身上,并修复了它。