0

私は GridLayout (GridView ではありません!) を使用して、次のようなレイアウトを実現しようとしています:

ここに画像の説明を入力

しかし、私のコード (およびこれまでに試したすべてのこと) では、水平方向に隣接する 2 つのビューの上部が常に整列されます。代わりに、新しい各ビューをその列の最高水準点に合わせて配置するように指示することはできますか? ( 「自動インデックス割り当て」の下の新しいレイアウト ウィジェット: Space および GridLayoutを参照してください)

私のlayout.xmlは現在次のようになっています:

<GridLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/scroll_view_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        android:columnCount="2"
        />

この GridLayout に、プログラムでビューを追加します。

GridLayout scrollViewContainer = Views.findById(rootView, R.id.scroll_view_container);

for (i=0; i < list.size(); i++) 
  TextView tv = new TextView(context);
  tv.setText("foobar");

  GridLayout.LayoutParams lp = new GridLayout.LayoutParams();
  // left, right, left, right - creates new default rows
  lp.columnSpec = GridLayout.spec(i%2);

  // this would put every view in the same row => all Views are on the very top
  // lp.rowSpec = GridLayout.spec(0);

  tv.setLayoutParams(lp);

  scrollViewContainer.addView(tv);

}
4

2 に答える 2

1

私のコードはあなたのものと似ていて、同じ問題に遭遇していました。問題は、作成後に列と行の仕様を直接 layoutParams に設定することです。コンストラクターでこの属性を指定する必要があります。

Spec rowspecs = GridLayout.spec(row, 1); 
Spec colspecs = GridLayout.spec(column, 1);
GridLayout.LayoutParams gridLayoutParam = new GridLayout.LayoutParams(rowspecs, colspecs);
于 2013-10-28T21:11:42.120 に答える
0

アップデート:

新しいRecyclerViewStaggeredGridViewLayoutManagerを使用すると、サードパーティのライブラリがなくてもこれを実現できます。

古い答え:

この種の View は、StaggeredGridView という名前で Google によって既に行われていることがわかりました。かつては AOSP に掲載されていましたが、再び取り出されました (この情報のソースを失いました... とにかく)。ただし、StaggeredGridView の修正版をここで見つけることができます。

https://github.com/maurycyw

元の Google ソースは次のとおりです。

https://github.com/friberry/StaggeredGridView/blob/9c4582ab8e79294ab60f63277e2a54c58e74b372/src/com/origamilabs/library/views/StaggeredGridView.java

また、公式の Etsy アプリにも、非常に優れた実装が見られます。コードが公開されました:

https://github.com/etsy/AndroidStaggeredGrid

于 2013-09-08T15:20:52.857 に答える