Android: Dynamic column number in GridView and Gridlayout manager
If you want to change grid item dynamically then follow these steps. This will help you to achieve your goal.
For GridView just do :
final GridView gridView = (GridView) rootView.findViewById(R.id.gridView); int gridViewEntrySize = getResources().getDimensionPixelSize(R.dimen.grip_view_entry_size); int gridViewSpacing = getResources().getDimensionPixelSize(R.dimen.grip_view_spacing); WindowManager wm = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE); Display display = wm.getDefaultDisplay(); int numColumns = (display.getWidth() - gridViewSpacing) / (gridViewEntrySize + gridViewSpacing); gridView.setNumColumns(numColumns);
For Recyclerview use this layout manager :
import android.content.Context; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.RecyclerView; public class VarColumnGridLayoutManager extends GridLayoutManager { private int minItemWidth; public VarColumnGridLayoutManager(Context context, int minItemWidth) { super(context, 1); this.minItemWidth = minItemWidth; } @Override public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) { updateSpanCount(); super.onLayoutChildren(recycler, state); } private void updateSpanCount() { int spanCount = getWidth() / minItemWidth; if (spanCount < 1) { spanCount = 1; } this.setSpanCount(spanCount); } }
Share this content: