@Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { mRecyclerView = new RecyclerView(container.getContext()); mRecyclerView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); mRecyclerView.setLayoutManager(new GridLayoutManager(container.getContext(), 4)); mRecyclerView.setAdapter(new Adapter()); return mRecyclerView; }
@Override public void onAttachedToRecyclerView(RecyclerView recyclerView) { super.onAttachedToRecyclerView(recyclerView); if (recyclerView.getLayoutManager() instanceof GridLayoutManager) { GridLayoutManager gridManager = (GridLayoutManager) recyclerView.getLayoutManager(); spanCount = gridManager.getSpanCount(); originalSpanLookup = gridManager.getSpanSizeLookup(); gridManager.setSpanSizeLookup(spanSizes); } }
@Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { // we want the grid to scroll over the top of the toolbar but for the toolbar items // to be clickable when visible. To achieve this we play games with elevation. The // toolbar is laid out in front of the grid but when we scroll, we lower it's elevation // to allow the content to pass in front (and reset when scrolled to top of the grid) if (newState == RecyclerView.SCROLL_STATE_IDLE && layoutManager.findFirstVisibleItemPosition() == 0 && layoutManager.findViewByPosition(0).getTop() == grid.getPaddingTop() && toolbar.getTranslationZ() != 0) { // at top, reset elevation toolbar.setTranslationZ(0f); } else if (newState == RecyclerView.SCROLL_STATE_DRAGGING && toolbar.getTranslationZ() != -1f) { // grid scrolled, lower toolbar to allow content to pass in front toolbar.setTranslationZ(-1f); } } };
@Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.list); GridLayoutManager layoutManager = new GridLayoutManager(getContext(), 4); layoutManager.setOrientation(RecyclerView.VERTICAL); recyclerView.setLayoutManager(layoutManager); recyclerView.setAdapter(new RecyclerView.Adapter<Holder>() { @Override public Holder onCreateViewHolder(ViewGroup parent, int viewType) { @SuppressLint("InflateParams") View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_list, null); return new Holder(view); } @Override public void onBindViewHolder(Holder holder, int position) { holder.bind(position); } @Override public int getItemCount() { return Style.values().length; } }); }
GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 3); gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { @Override public int getSpanSize(int position) {
public static int getSpanCount(@NonNull RecyclerView rv) { RecyclerView.LayoutManager layoutManager = rv.getLayoutManager(); if (layoutManager instanceof GridLayoutManager) { return ((GridLayoutManager) layoutManager).getSpanCount(); } else if (layoutManager instanceof StaggeredGridLayoutManager) { return ((StaggeredGridLayoutManager) layoutManager).getSpanCount(); } else { return 1; } }
@Override public void onDetachedFromRecyclerView(RecyclerView recyclerView) { super.onDetachedFromRecyclerView(recyclerView); if (recyclerView.getLayoutManager() instanceof GridLayoutManager) { GridLayoutManager gridManager = (GridLayoutManager) recyclerView.getLayoutManager(); gridManager.setSpanSizeLookup(originalSpanLookup); originalSpanLookup = null; spanCount = 1; } }
private void calculatePositionDetails(RecyclerView parent, int position, LayoutManager layout) { int itemCount = parent.getAdapter().getItemCount(); firstItem = position == 0; lastItem = position == itemCount - 1; horizontallyScrolling = layout.canScrollHorizontally(); verticallyScrolling = layout.canScrollVertically(); grid = layout instanceof GridLayoutManager; if (grid) { GridLayoutManager grid = (GridLayoutManager) layout; final SpanSizeLookup spanSizeLookup = grid.getSpanSizeLookup(); int spanSize = spanSizeLookup.getSpanSize(position); int spanCount = grid.getSpanCount(); int spanIndex = spanSizeLookup.getSpanIndex(position, spanCount); isFirstItemInRow = spanIndex == 0; fillsLastSpan = spanIndex + spanSize == spanCount; isInFirstRow = isInFirstRow(position, spanSizeLookup, spanCount); isInLastRow = !isInFirstRow && isInLastRow(position, itemCount, spanSizeLookup, spanCount); } }
firstVisiblePosition = ((LinearLayoutManager) mRecyclerView.getLayoutManager()).findFirstVisibleItemPosition(); } else if (mRecyclerView.getLayoutManager() instanceof GridLayoutManager) { firstVisiblePosition = ((GridLayoutManager) mRecyclerView.getLayoutManager()).findFirstVisibleItemPosition();
groupAdapter.setSpanCount(12); populateAdapter(); layoutManager = new GridLayoutManager(this, groupAdapter.getSpanCount()); layoutManager.setSpanSizeLookup(groupAdapter.getSpanSizeLookup());
@Override public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { if (!isInset(view, parent)) return; GridLayoutManager.LayoutParams layoutParams = (GridLayoutManager.LayoutParams) view.getLayoutParams(); GridLayoutManager gridLayoutManager = (GridLayoutManager) parent.getLayoutManager(); float spanSize = layoutParams.getSpanSize(); float totalSpanSize = gridLayoutManager.getSpanCount(); float n = totalSpanSize / spanSize; // num columns float c = layoutParams.getSpanIndex() / spanSize; // column index float leftPadding = padding * ((n - c) / n); float rightPadding = padding * ((c + 1) / n); outRect.left = (int) leftPadding; outRect.right = (int) rightPadding; outRect.bottom = padding; }
private void setGridHeaderFooter(RecyclerView.LayoutManager layoutManager) { if (layoutManager instanceof GridLayoutManager) { final GridLayoutManager gridLayoutManager = (GridLayoutManager) layoutManager; gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { @Override public int getSpanSize(int position) { boolean isShowHeader = (position == 0 && hasHeader()); boolean isShowFooter = (position == getItemCount() - 1 && hasFooter()); if (isShowFooter || isShowHeader) { return gridLayoutManager.getSpanCount(); } return 1; } }); } }
position = ((LinearLayoutManager) mRecyclerView.getLayoutManager()).findFirstVisibleItemPosition(); } else if (mRecyclerView.getLayoutManager() instanceof GridLayoutManager) { position = ((GridLayoutManager) mRecyclerView.getLayoutManager()).findFirstVisibleItemPosition(); position = ((LinearLayoutManager) mRecyclerView.getLayoutManager()).findFirstVisibleItemPosition(); } else if (mRecyclerView.getLayoutManager() instanceof GridLayoutManager) { position = ((GridLayoutManager) mRecyclerView.getLayoutManager()).findFirstVisibleItemPosition();
@Override protected void onViewBound(@NonNull View view) { super.onViewBound(view); tvTitle.setText(title); imgDot.getDrawable().setColorFilter(ContextCompat.getColor(getActivity(), dotColor), Mode.SRC_ATOP); ViewCompat.setTransitionName(tvTitle, getResources().getString(R.string.transition_tag_title_indexed, fromPosition)); ViewCompat.setTransitionName(imgDot, getResources().getString(R.string.transition_tag_dot_indexed, fromPosition)); recyclerView.setHasFixedSize(true); recyclerView.setLayoutManager(new GridLayoutManager(view.getContext(), 2)); recyclerView.setAdapter(new CityGridAdapter(LayoutInflater.from(view.getContext()), CITY_MODELS)); }
layoutManager = new GridLayoutManager(this, columns); layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { @Override public int getSpanSize(int position) {
@Override public int getSpanSize(int position) { int itemType = helper.getItemViewType(position); if ((itemType >= -1000 && itemType < 0) || (itemType >= -3000 && itemType < -2000)) { return layout.getSpanCount(); } return 1; } });
/** * If a grid layout manager is set we sync the span count between the layout and the epoxy * adapter automatically. */ private void syncSpanCount() { LayoutManager layout = getLayoutManager(); if (layout instanceof GridLayoutManager && epoxyController != null) { GridLayoutManager grid = (GridLayoutManager) layout; if (epoxyController.getSpanCount() != grid.getSpanCount() || grid.getSpanSizeLookup() != epoxyController.getSpanSizeLookup()) { epoxyController.setSpanCount(grid.getSpanCount()); grid.setSpanSizeLookup(epoxyController.getSpanSizeLookup()); } } }
public static boolean initSpanSizeLookup(final RecyclerView rv, final IHeaderAdapter adapter) { final RecyclerView.LayoutManager lm = rv.getLayoutManager(); if(lm != null && lm instanceof GridLayoutManager) { ((GridLayoutManager)lm).setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { @Override public int getSpanSize(int position) { if(rv == null) return 1; return adapter.isHeader(position) ? ((GridLayoutManager) lm).getSpanCount() : 1; } }); return true; } return false; }
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_transition); RecyclerView list = findViewById(R.id.list); list.setLayoutManager(new GridLayoutManager(this, 2)); ImageAdapter imageAdapter = new ImageAdapter(new ImageAdapter.Listener() { @Override public void onImageClicked(View view) { transition(view); } }); list.setAdapter(imageAdapter); }
private void createLayoutManager() { layoutManager = new GridLayoutManager(this, GRID_SPAN_COUNT); layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { @Override public int getSpanSize(int position) { return adapter.isSection(position) ? GRID_SPAN_COUNT : 1; } }); }