2017-04-25 5 views
0

グリッドビューのアイテムを完全な四角形にしたいと考えました。私はthis answerで提案された方法を使用し、それはうまくいった。続きAndroidグリッド表示アイテムのアスペクト比(幅よりも少し高さを高くします)

は今、私はアイテムの幅よりもアイテムの高さが1.2倍の大きさにしたいコード(グリッドビューアイテムのオーバーライドonMeasure方法)

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

です。そこで、以下のようなコードを修正しました。

@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

私はあなたが説明したが、通常、私は次のあなたがMeasureSpecsをインクリメントしますが、まずそれからサイズを取得し、それをインクリメントするべきではありません

@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

をonMeasure使用行動に直面していませんでした。またsuper.onMeasure(int widthMeasureSpec, int heightMeasureSpec);の代わりにsetMeasuredDimension(width, height);に電話する必要があります。あなたは今、幅と高さが何であるべきかを決めているからです。

@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

「super.OnMeasure」の代わりに 'setMeasuredDimension(width、height);'を呼び出すことを忘れてしまった。幅と高さがどのようにすべきかあなた自身が決めるからです。 –

+0

'setMeasuredDimension()'は必要なサイズ調整を行いましたが、アイテムの内容が表示されません。アイテムがクリック可能なのでクリックしたときにアイテムの概要を見ることができます。とにかく、アンドリューの方法は私のために働いた。 –

関連する問題