GridView行为不正确

时间:2014-05-10 11:53:30

标签: android gridview layout

目前我正在尝试使用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

2 个答案:

答案 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中的列始终具有相同的尺寸。