web-dev-qa-db-ja.com

GridLayoutManagerの可変数の列

RecyclerViewの使用中に、GridLayoutManagerの行に可変数の列を表示したかったのです。表示される列の数は、列のTextViewのサイズによって異なります。

テキストが動的に挿入されているため、列幅がわかりません。

誰か助けてもらえますか? StaggeredGridLayoutManagerは、高さをカスタマイズしますが、固定数の列を使用するため、私の目的を解決していません。

14
sg_dev

setSpanSizeLookupの-​​ GridLayoutManager メソッドを見てください。 RecyclerViewの特定の位置のスパンサイズを指定できます。したがって、可変列番号の要件に合わせて使用​​できる可能性があります。

編集:

GridLayoutManager manager = new GridLayoutManager(context, 2); // MAX NUMBER OF SPACES
manager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
    @Override
    public int getSpanSize(int position) {
        if (position == 1 || position == 6) {
            return 2; // ITEMS AT POSITION 1 AND 6 OCCUPY 2 SPACES
        } else {
            return 1; // OTHER ITEMS OCCUPY ONLY A SINGLE SPACE
        }
    }
});

この種のレイアウトを使用する場合、managerRecyclerViewは次のようになります。

+---+---+
| 0 |   |
+---+---+
|   1   |
+---+---+
| 2 | 3 |
+---+---+
| 4 | 5 |
+---+---+
|   6   |
+---+---+

(数字の付いたボックスのみがRecyclerViewのアイテムを表し、他のボックスは単なる空のスペースです)

30
Bartek Lipinski

次のようなバリエーションを作成する場合:4列、5列、6列...この数値(60)の間でMMC(最小複数共通)を取得し、GridLayoutManagerを設定できます。


    GridLayoutManager manager = new GridLayoutManager(context, 60); // set the grid with the MMC
    manager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
        @Override
        public int getSpanSize(int position) {
            return 12; // 60/12 = 5 Columns
        }
    });
5
Charleston