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: