12

Android API レベル 8 の GridView の行数を取得する方法はありますか?

4

5 に答える 5

19

昨夜これを解決する必要がありましたが、うまくいきました。子の幅を調べ、すべてのセルの幅が同じであると仮定して、GridView の幅を子の幅で割ります。(getColumnWidth()以前の API でも使用できないため、回避策)。

private int getNumColumnsCompat() {
    if (Build.VERSION.SDK_INT >= 11) {
        return getNumColumnsCompat11();

    } else {
        int columns = 0;
        int children = getChildCount();
        if (children > 0) {
            int width = getChildAt(0).getMeasuredWidth();
            if (width > 0) {
                columns = getWidth() / width;
            }
        }
        return columns > 0 ? columns : AUTO_FIT;
    }
}

@TargetApi(Build.VERSION_CODES.HONEYCOMB)
private int getNumColumnsCompat11() {
    return getNumColumns();
}

ただし、これには注意すべき重要な制限がいくつかあります。

  • GridView がレイアウトされた後、実際にいくつかのビューが追加された場合にのみ機能します。
  • これは、 で追加されたセル間隔を考慮していませんsetHorizontalSpacing()。水平方向の間隔を使用する場合は、これを考慮して微調整する必要がある場合があります。
  • 私の場合、考慮すべきパディングや追加の幅はありませんでした。その場合、除算が最終的に正しい答えになるように、これを微調整する必要があります。
于 2013-03-22T13:56:52.867 に答える
3

これを試して:

Math.ceil( (double)gridView.getCount() / (double)gridView.getNumColumns() );
于 2012-09-01T22:27:19.343 に答える
1

Android APIガイドGridViewページを見ると、パラメータの1つが位置であるというメソッドがあることがわかります。多分あなたは行数を得ることができます。onItemClickListenergetNumColumns()

于 2012-09-01T22:26:36.997 に答える