我正在尝试使用GridLayout(而不是GridView!)来实现这样的布局:
但是使用我的代码(以及我迄今为止所尝试的所有内容),两个水平相邻视图的顶部始终对齐。是否可以告诉每个新视图在其列的高水位线上对齐? (请参阅“自动索引分配”下的New Layout Widgets: Space and 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);
}
答案 0 :(得分:1)
我的代码与您的代码类似,我遇到了同样的问题。问题是在创建后将列和行规范直接设置为layoutParams。您应该在构造函数上指定此属性。
Spec rowspecs = GridLayout.spec(row, 1);
Spec colspecs = GridLayout.spec(column, 1);
GridLayout.LayoutParams gridLayoutParam = new GridLayout.LayoutParams(rowspecs, colspecs);
答案 1 :(得分:0)
更新:
使用新的RecyclerView和StaggeredGridViewLayoutManager,您可以在没有第三方库的情况下实现此目的。
OLD ANSWER:
我发现这种视图已经由Google以StaggeredGridView的名义完成。它曾经在AOSP中,但又被取出(我丢失了这个信息的来源......但无论如何)。但是你可以在这里找到StaggeredGridView的修改版本:
最初的Google来源是:
另一个非常好的实现是在官方的Etsy应用程序中找到的。代码公之于众: