¿如何调整自定义视图的大小?

时间:2015-07-23 00:04:47

标签: android android-layout

在问这个之前,我已经查了很多问同样的问题,答案是一样的:

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

但它在屏幕上没有显示任何内容。如果我将宽度和高度设置为数字,它可以正常工作,但不能使用变量。

1 个答案:

答案 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));
                }
            });