在问这个之前,我已经查了很多问同样的问题,答案是一样的:
mylayout.setLayoutParams(new RelativeLayout.LayoutParams(theWidthIWant,TheHeightIWant));
// |
// -->or your container's layout
所以我使用这段代码来解决我的问题:我正在制作一个使用一些按钮移动角色的游戏,这些按钮采用自LinearLayout
扩展的自定义布局SquareLayout
(是的,你猜对了,它是一个正方形),但是我希望它的高度(或宽度,因为宽度和高度总是相同的)是它的父级的一半(或者是相同的,屏幕),所以我'我在onCreate方法中使用此代码就像这样:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RelativeLayout rl1 = (RelativeLayout)findViewById(R.id.rl1);
SquareLayout sq1 = (SquareLayout)findViewById(R.id.square);
int width = sq1.getWidth()/2,height = sq1.getHeight()/2;
sq1.setLayoutParams(new RelativeLayout.LayoutParams(width,height));
}
但它在屏幕上没有显示任何内容。如果我将宽度和高度设置为数字,它可以正常工作,但不能使用变量。
答案 0 :(得分:1)
当您请求width-height时,也许sq1不可见,因此它返回null,请尝试:
SquareLayout sq1 = (SquareLayout)findViewById(R.id.square);
sq1.post(new Runnable() {
@Override
public void run() {
int width = sq1.getWidth()/2,height = sq1.getHeight()/2;
sq1.setLayoutParams(new RelativeLayout.LayoutParams(width,height));
}
});