2017-04-25 43 views
0

我想讓網格視圖的項目呈現完美的正方形。我使用了this answer建議的方法,它運行良好。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)); 
} 

但是,項目變得非常長,甚至無法適應屏幕。令人驚訝的是,如果將heightMeasureSpec設置爲小於widthMeasureSpec的值,則項目高度仍然大於寬度。以下代碼使項目更高。

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

有人可以解釋這種行爲嗎?有什麼辦法可以實現我想要的嗎?

回答

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

你不應該遞增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); 
} 
+0

忘記提及調用'setMeasuredDimension(width,height);'now而不是'super.OnMeasure'。既然你現在決定自己的寬度和高度應該是什麼。 –

+0

'setMeasuredDimension()'確實進行了必要的大小調整,但現在我看不到該項目的內容。由於項目是可點擊的,因此我可以看到該項目的輪廓。無論如何,安德魯的方法爲我工作。 –