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