Android网格视图项长宽比(使高度略高于宽度)

时间:2017-04-25 12:09:57

标签: android

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

有人可以解释这种行为吗?有什么方法可以达到我的目的吗?

2 个答案:

答案 0 :(得分:1)

我没有面对你所描述的行为,但通常我会使用下一个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)
    );
}

答案 1 :(得分:1)

你不应该增加MeasureSpecs,而是先从中获取尺寸,然后再增加它。您还应该致电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);
}