Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android GridView行为不正确_Android_Gridview_Layout - Fatal编程技术网

Android GridView行为不正确

Android GridView行为不正确,android,gridview,layout,Android,Gridview,Layout,目前,我正在尝试使用GridView创建一个图像列表,下面有一个文本视图,布局应该尽可能多地适应宽度 使用GridView时,请执行以下操作: <GridView android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/gridView" android:numColumns="auto_fit" android:layout_gr

目前,我正在尝试使用GridView创建一个图像列表,下面有一个文本视图,布局应该尽可能多地适应宽度

使用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除外,它的静态宽度为75dip

我看到此代码的以下布局:

XX

XX

XX

如果特别设置了列宽,我可以很容易地得到:

XXXX

XXXX


XXXX

我认为您应该做的是使用

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:numColumns
设置为
auto\u-fit
,还需要设置
android:columnWidth
,以便GridView能够计算可以容纳多少项。GridView在知道一行中可以容纳多少项视图之前不会创建任何项视图,并且不会度量项视图


如果您使用的是
auto\u-fit
,则应始终能够提前确定物品的宽度。如果没有,则意味着您的项目可能具有不同的宽度,在这种情况下,您的项目将无法正确呈现,因为GridView中的列总是具有相同的大小。

可以忽略不计,用户没有机会注意到任何东西,即使是在较弱的手机上。你真的应该在有和没有的情况下都尝试一下,然后自己看看结果:)这只测量一个视图的宽度。我认为JamieB想要测量所有视图以确定最大宽度;在这种情况下,许多项目的性能远远不能忽略。gridView Column width应与gridView Column中的最大大小内容相匹配(如果找到),并与其他内容相匹配。确定单元格内容的最大宽度的唯一方法是实例化和填充网格中的所有单元格,并对其进行测量,这是一个非常繁重的操作,基本上使得视图虚拟化(只绘制可见的内容)毫无用处。我担心会出现这种情况,我想我只能坚持静态宽度。