目前我正在尝试使用GridView创建一个图像列表,在它们下面有一个textview,布局应该尽可能宽度地适合它们。
使用GridView时:
<GridView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/gridView"
android:numColumns="auto_fit"
android:layout_gravity="center_horizontal|top"
android:clickable="false"
/>
预期的行为是列会自动换行内容并尽可能宽地放置多个项目?
网格项布局中的textview设置为除了ImageView之外的wrap_content,它的静态宽度为75dip。
我看到以下布局使用此代码:
XX
XX
XX
如果专门设置了列宽,我可以很容易地得到:
XXXX
XXXX
XXXX
答案 0 :(得分:1)
我认为你应该做的是用
测量gridview的列宽public int measureCellWidth( Context context, View cell )
{
// We need a fake parent
FrameLayout buffer = new FrameLayout( context );
android.widget.AbsListView.LayoutParams layoutParams = new android.widget.AbsListView.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
buffer.addView( cell, layoutParams);
cell.forceLayout();
cell.measure(1000, 1000);
int width = cell.getMeasuredWidth();
buffer.removeAllViews();
return width;
}
然后用
设置它gridView.setColumnWidth(width);
你也应该阅读这个Android: How does GridView auto_fit find the number of columns?
答案 1 :(得分:1)
如果您将android:numColumns
设置为auto_fit
,则还需要设置android:columnWidth
,以便GridView能够计算出适合的项目数。 GridView在知道它们可以容纳多少个项目视图之前不会创建任何项目视图,并且它不会测量项目视图。
如果您使用auto_fit
,则应始终能够提前确定商品的宽度。如果您不是,则表示您的商品可能具有不同的宽度,在这种情况下,您的商品将无法正常呈现,因为GridView中的列始终具有相同的尺寸。