在Android中创建动态大小的正方形(相等的高度和宽度)UI元素

时间:2012-07-11 18:32:40

标签: android layout user-interface height width

正如标题所述,我试图将布局元素的宽度设置为等于高度(设置为与父级匹配)。我已经尝试从height参数以编程方式设置width参数,但这显示为-1而不是实际高度(因为它与父级匹配)。有谁知道如何创建大小是动态的方形布局元素?感谢。

2 个答案:

答案 0 :(得分:1)

所以我一直在为这样的事情做的事情 - 我不知道它是理想的,但它运作得很好 - 是使用ViewTreeObserver.OnGlobalLayoutListener。像这样:

View myView = findViewById(R.id.myview);
ViewTreeObserver observer = myView.getViewTreeObserver();
observer.addOnGlobalLayoutListener(new SquareLayoutAdjuster());

class SquareLayoutAdjuster 
        implements ViewTreeObserver.OnGlobalLayoutListener {
    @Override
    public void onGlobalLayout() {
        int dimension = myView.getHeight();
        LayoutParams params = myView.getLayoutParams();
        params.width = dimension;
        myView.setLayoutParams(params);
        observer.removeGlobalOnLayoutListener(this);
    }
}

这只是一般的想法,我不知道它是否按原样编译,但基本上在onGlobalLayout()方法中,您的视图可以保证被测量。您最后删除了侦听器以防止多次调用它(除非您因任何原因需要这样做)。

答案 1 :(得分:0)

KCOPPOCK的解决方案对我有用,谢谢。但是我得到了“java.lang.IllegalStateException:这个ViewTreeObserver不活动,再次”在运行时调用getViewTreeObserver()。所以我用 findViewById(R.id.serie_main_layout).getViewTreeObserver().removeOnGlobalLayoutListener(this);

而不是

observer.removeGlobalOnLayoutListener(this);

并且一切都很完美。