There was the same problem ... I solved this with overridden onMeasure ()
public class GridViewEx extends GridView { private int mRequestedNumColumns = 0; public GridViewEx(Context context) { super(context); } public GridViewEx(Context context, AttributeSet attrs) { super(context, attrs); } public GridViewEx(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override public void setNumColumns(int numColumns) { super.setNumColumns(numColumns); if (numColumns != mRequestedNumColumns) { mRequestedNumColumns = numColumns; } } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); if (mRequestedNumColumns > 0) { int width = (mRequestedNumColumns * getColumnWidth()) + ((mRequestedNumColumns-1) * getHorizontalSpacing()) + getListPaddingLeft() + getListPaddingRight(); setMeasuredDimension(width, getMeasuredHeight()); } } }
source share