0

我正在尝试更改 gridView 列号。我打电话setNumColumn()invalidateViews()更新视图。

但是,网格的单元格宽度不会动态变化。我设置了stretchMode="columnWidth",但它没有工作。

截屏

4

3 回答 3

3

问题解决了:

当网格视图在运行时更改列时,网格视图中的子视图不会重新计算其布局。

在您的 BaseAdapter 中,您应该调用 forceLayout() 来计算其布局。

@Override
public View getView(final int position, View convertView,
        ViewGroup parent) {


    if (null == convertView) {
        convertView = mInflater.inflate(
                R.layout.mnm_customer_user_thumbnail, null);

        control.txtUserName = (TextView) convertView
                .findViewById(R.id.mnmTxtStudentName);
        control.image = (ImageView) convertView
                .findViewById(R.id.mnmImageStudent);
        control.imageCheckBox = (ImageView) convertView
                .findViewById(R.id.mnmImageCheckBox);
        control.mnmOuterBounder = (RelativeLayout) convertView
                .findViewById(R.id.mnmOuterBound);
        convertView.setTag(control);
    } else {
        convertView.forceLayout();
    }

...
...
...
...

谢谢

于 2012-10-30T08:13:41.523 回答
2

也许你可以通过谷歌提供的这个很好的示例获得帮助 http://developer.android.com/shareables/training/BitmapFun.zip 以下位于 ImageGridFragment.java 中的代码用于在运行时动态处理列号更改例如旋转设备时屏幕方向发生变化:

这里是评论:这个监听器用来获取GridView的最终宽度,然后计算列数和每列的宽度。每列的宽度是可变的,因为 GridView 具有stretchMode=columnWidth。列宽用于设置每个视图的高度,因此我们得到 nic 方形缩略图。

mGridView.getViewTreeObserver().addOnGlobalLayoutListener(
            new ViewTreeObserver.OnGlobalLayoutListener() {
                @Override
                public void onGlobalLayout() {
                    if (mAdapter.getNumColumns() == 0) {
                        final int numColumns = (int) Math.floor(
                                mGridView.getWidth() / (mImageThumbSize + mImageThumbSpacing));
                        if (numColumns > 0) {
                            final int columnWidth =
                                    (mGridView.getWidth() / numColumns) - mImageThumbSpacing;
                            mAdapter.setNumColumns(numColumns);
                            mAdapter.setItemHeight(columnWidth);
                            if (BuildConfig.DEBUG) {
                                Log.d(TAG, "onCreateView - numColumns set to " + numColumns);
                            }
                        }
                    }
                }
            });

    return v;
于 2013-01-23T08:01:27.510 回答
0

在xml中你必须提供这个属性..

 android:stretchMode="columnWidth" . In your adapter depending on the size(by  `getCount()`) of the list colomn will create dynamically..
于 2012-10-30T05:15:05.440 回答