Android网格视图项目纵横比(使高度高于宽度)



我想制作我的网格视图的物品完美正方形。我使用了此答案建议的方法,并且效果很好。

以下是代码(覆盖的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));
}

但是,这些物品变得很长,甚至不再适合屏幕。

出乎意料的是,如果我将高度验证设置为比widthmeasurespec较小的值,那么项目的高度仍会大于宽度。以下代码使项目更高。

@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, (int) (widthMeasureSpec * 0.5));
}

有人可以解释这种行为吗?有什么办法可以实现我想要的?

我没有面对您描述的行为

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    int originalWidth = MeasureSpec.getSize(widthMeasureSpec);
    super.onMeasure(
            widthMeasureSpec,
            MeasureSpec.makeMeasureSpec((int) (originalWidth * 1.1f), MeasureSpec.EXACTLY)
    );
}

您不应递增Measurepecs,而应首先从中获取大小,然后将其递增。您还应该致电setMeasuredDimension(width, height);而不是super.onMeasure(int widthMeasureSpec, int heightMeasureSpec);。由于您现在要确定宽度和高度应该是什么。

@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    int width = MeasureSpec.getSize(widthMeasureSpec);
    int height = (int) (MeasureSpec.getSize(widthMeasureSpec) * 1.2);
    setMeasuredDimension(width, height);
}

最新更新