我在指定相对布局的高度时遇到问题。据我所知,这两个代码块应该是等价的(myLayout是我在XML中定义的RelativeLayout,初始高度为" 0dp",它的父亲也是RelativeLayout) :
第1块:
RelativeLayout.LayoutParams p = (RelativeLayout.LayoutParams)myLayout.getLayoutParams();
p.height = (int)(35*scale);
myLayout.setLayoutParams(p);
myLayout.invalidate();
第2块:
RelativeLayout.LayoutParams p = (RelativeLayout.LayoutParams)myLayout.getLayoutParams();
RelativeLayout.LayoutParams newP = new RelativeLayout.LayoutParams(p.width, (int)(35*scale));
myLayout.setLayoutParams(newP);
myLayout.invalidate();
在我的情况下,比例为2。 所以我希望myLayout在执行这些块之后的高度为70,并且我希望它在我调用myLayout.getHeight()时返回该高度。此外,我希望myLayout占用一个高度为70及其前宽度的矩形(碰巧是match_parent)。
但是当我运行代码时,第一个块不会更改屏幕上myLayout的高度,也不会更改myLayout.getHeight()的返回值。但它改变了myLayout.getLayoutParams()。height。
现在第二个块确实有效,但我必须运行两次(!?)才能使更改生效。我在这里严重不知所措,我在文档中找不到与此密切相关的任何内容。
当我昨天出发时,我认为这将是一项轻松的任务,但现在我正在质疑我的理智,等等。任何想法?
答案 0 :(得分:1)
如果动态确定大小,您可能需要使用ViewTreeObserver来获取屏幕上显示的大小。
在定义参数时设置宽度和高度。如果您希望宽度为match_parent
,请更改您的代码,如下所示,它将起作用(如果您不想使用match_parent,只需在下面的代码中设置所需的宽度):
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
LayoutParams.MATCH_PARENT, (int)(35*scale));
myLayout.setLayoutParams(params);