recyclerview no es apto para todos los tamaños de pantalla

Estoy usando recylerview y gridlayout manager con cardviews para cada fila, mi vista de fila (childview) no responde en absoluto.

Quiero mostrar 15 puntos de vista de manera que en modo vertical todos mis 15 puntos de vista infantil estén visibles y mi vista de reciclador no se pueda desplazar, mientras que en modo horizontal debería actuar viceversa (debería ser desplazable)

He intentado muchas alianzas sugeridas en SO, pero nada parece estar funcionando.

el comportamiento actual en diferentes tamaños de pantalla son los siguientes

enter image description here

En la captura de pantalla adjunta, la tercera columna, la cuarta y la quinta fila no son visibles

enter image description here

En la pantalla dada arriba, mi ui encaja perfectamente en modo retrato, pero en el paisaje no puedo ver todas las vistas de tarjeta.

enter image description here

en la captura de pantalla adjunta arriba, la quinta fila no está visible y en el modo horizontal hay algunos errores de respuesta. cardview.xml

      

fragment_reminders.xml

        

¿Alguien puede guiarme para resolver esto? Gracias .

puedes usar esto:

recyclerView.setLayoutManager(new RecyclerView.GridLayoutManager(this, span_count)

Podría tener un archivo res/values/ints.xml con elementos , dando al entero un nombre (atributo de nombre) y un valor (texto del nodo ). También puede tener res/values-w600dp/ints.xml o res/values-land u otras variaciones del recurso, donde puede proporcionar diferentes valores para usar en diferentes tamaños de pantalla. Luego, en tiempo de ejecución, llame a getResources().getInteger() para recuperar el valor correcto del recurso que se usará para el dispositivo actual, y úselo en su constructor GridLayoutManager. Ahora, usted tiene el control sobre la cantidad de columnas que hay, al controlar cuántos tramos se suministran al constructor.

https://developer.android.com/training/multiscreen/screensizes

Otro enfoque, sugerido por Chiu-Ki Chan , es crear una subclase de RecyclerView, en la que proporcione un atributo personalizado para un ancho de columna aproximado deseado. Luego, en el método ‘ onMeasure() su subclase, puede calcular el número de tramos a usar para obtener el ancho de columna deseado.

https://developer.android.com/reference/android/support/v7/widget/GridLayoutManager.html#GridLayoutManager(android.content.Context,%20int)

https://developer.android.com/reference/android/support/v7/widget/RecyclerView#setlayoutmanager

crea una clase de la siguiente manera:

  import android.graphics.Rect; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.View; public class EqualSpacingItemDecoration extends RecyclerView.ItemDecoration { private final int spacing; private int displayMode; public static final int HORIZONTAL = 0; public static final int VERTICAL = 1; public static final int GRID = 2; public EqualSpacingItemDecoration(int spacing) { this(spacing, -1); } public EqualSpacingItemDecoration(int spacing, int displayMode) { this.spacing = spacing; this.displayMode = displayMode; } @Override public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { int position = parent.getChildViewHolder(view).getAdapterPosition(); int itemCount = state.getItemCount(); RecyclerView.LayoutManager layoutManager = parent.getLayoutManager(); setSpacingForDirection(outRect, layoutManager, position, itemCount); } private void setSpacingForDirection(Rect outRect, RecyclerView.LayoutManager layoutManager, int position, int itemCount) { // Resolve display mode automatically if (displayMode == -1) { displayMode = resolveDisplayMode(layoutManager); } switch (displayMode) { case HORIZONTAL: outRect.left = spacing; outRect.right = position == itemCount - 1 ? spacing : 0; outRect.top = spacing; outRect.bottom = spacing; break; case VERTICAL: outRect.left = spacing; outRect.right = spacing; outRect.top = spacing; outRect.bottom = position == itemCount - 1 ? spacing : 0; break; case GRID: if (layoutManager instanceof GridLayoutManager) { GridLayoutManager gridLayoutManager = (GridLayoutManager) layoutManager; int cols = gridLayoutManager.getSpanCount(); int rows = itemCount / cols; outRect.left = spacing; outRect.right = position % cols == cols - 1 ? spacing : 0; outRect.top = spacing; outRect.bottom = position / cols == rows - 1 ? spacing : 0; } break; } } private int resolveDisplayMode(RecyclerView.LayoutManager layoutManager) { if (layoutManager instanceof GridLayoutManager) return GRID; if (layoutManager.canScrollHorizontally()) return HORIZONTAL; return VERTICAL; } } 

y para usarlo con su vista de reciclador:

1) para la vista de cuadrícula:

recyclerView.addItemDecoration(new EqualSpacingItemDecoration(, EqualSpacingItemDecoration.GRID));

2) para la vista vertical:

recyclerView.addItemDecoration(new EqualSpacingItemDecoration(, EqualSpacingItemDecoration.VERTICAL));

3) para la vista horizontal: recyclerView.addItemDecoration(new EqualSpacingItemDecoration(, EqualSpacingItemDecoration.HORIZONTAL));

Espero que esto te ayude.