我想使网格视图的项目成为完美的正方形。我使用了this answer建议的方法,并且效果很好。
以下是代码(网格视图项目的覆盖onMeasure
方法)
@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, widthMeasureSpec);
}
现在,我要使项目的高度比项目的宽度大1.2倍。因此,我修改了如下代码。
@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, (int) (widthMeasureSpec * 1.2));
}
但是,这些项目变得很长,甚至无法容纳在屏幕上。
令人惊讶的是,如果我将heightMeasureSpec设置为小于widthMeasureSpec的值,则项目高度仍然大于宽度。以下代码使项目更高。
@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, (int) (widthMeasureSpec * 0.5));
}
有人可以解释这种行为吗?有什么办法可以实现我想要的?
最佳答案
我没有遇到您描述的行为,但通常我会使用下一个onMeasure
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int originalWidth = MeasureSpec.getSize(widthMeasureSpec);
super.onMeasure(
widthMeasureSpec,
MeasureSpec.makeMeasureSpec((int) (originalWidth * 1.1f), MeasureSpec.EXACTLY)
);
}