我想使网格视图的项目成为完美的正方形。我使用了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)
    );
}

10-04 16:55