我想让我的网格视图的项目完美正方形。我使用了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));
}
有人可以解释这种行为吗?有什么方法可以达到我的目的吗?
答案 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);
}