0

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

4

2 回答 2

1

所以我一直在为这样的事情做 - 我不知道它是否理想,但它工作得很好 - 是 use 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()方法上,保证你的观点是有衡量的。您在最后删除侦听器以防止它被多次调用(除非您出于任何原因需要发生这种情况)。

于 2012-07-11T18:43:58.543 回答
0

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

反而

observer.removeGlobalOnLayoutListener(this);

一切都很完美。

于 2014-01-22T20:35:00.713 回答