我想制作我的网格视图的物品完美正方形。我使用了此答案建议的方法,并且效果很好。
以下是代码(覆盖的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);
}