【问题标题】:Android grid view item aspect ratio (make height little bit higher than the width)Android网格视图项目纵横比(使高度略高于宽度)
【发布时间】:2017-09-22 10:39:50
【问题描述】:

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

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

【问题讨论】:

    标签: android


    【解决方案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);
    }
    

    【讨论】:

    • 忘了说现在打电话给setMeasuredDimension(width, height); 而不是super.OnMeasure。既然你现在自己决定宽度和高度应该是多少。
    • setMeasuredDimension() 确实进行了必要的尺寸调整,但现在我看不到该项目的内容。当我点击它时,我可以看到它的轮廓,因为它是可点击的。无论如何,安德鲁的方法对我有用。
    【解决方案2】:

    我没有遇到您描述的行为,但通常我使用 next 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)
        );
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-26
      • 1970-01-01
      • 1970-01-01
      • 2014-07-01
      • 1970-01-01
      • 2019-11-14
      • 1970-01-01
      • 2018-12-18
      相关资源
      最近更新 更多