Hacer Recyclerview Altura fija y desplazable

SOLUCIONAR RESPUESTA DE CHEQUE A CONTINUACIÓN …

Así que estoy tratando de crear una funcionalidad de comentarios para mi aplicación de Android y quiero mostrar los comentarios dentro de una vista de reciclador y luego tener un botón y una vista de texto debajo de la vista de reciclador para agregar comentarios. Quiero que el reciclador tenga una cierta altura y que sea desplazable si hay muchos comentarios porque no quiero que los usuarios tengan que desplazarse hacia abajo para encontrar el botón Agregar.

No pude hacer que funcionara, así que me preguntaba si alguien más tenía ese problema.

Tengo todo el adaptador y todo configurado, solo estoy teniendo problemas con la visión del reciclador.

Gracias.

Yo prob no estaba claro en lo que estaba tratando de lograr. Intento crear una tarjeta de visita donde muestre todos los comentarios y la capacidad de agregar un nuevo comentario. La vista del reciclador ocupará aproximadamente el 80% de la altura y luego el último 20% será para el texto de edición y el botón.

Mi XML (Desplácese hasta la última vista de carta donde está la vista del reciclador)

                            

El segundo y primer comentario están siendo cortados.

enter image description here

Entonces, ¿cuál era mi problema? Por alguna razón, Recyclerview no incluía wrap_contents. Investigué un poco (gracias stackoverflow) y descubrí que muchas personas tenían este problema y publicaron soluciones para este problema.

Básicamente, tuve que usar un customlayoutmanger personalizado para solucionar el problema.

Publicaré la solución que publicaron y los enlaces a sus preguntas. gracias por quien intentó ayudar, lo aprecio.

Este es el archivo extra que necesitaba. Y luego tuve que configurar mi vista de reciclador para usar este diseño en lugar del predeterminado.

 public class MyLinearLayoutManager extends LinearLayoutManager { public MyLinearLayoutManager(Context context, int orientation, boolean reverseLayout) { super(context, orientation, reverseLayout); } private int[] mMeasuredDimension = new int[2]; @Override public void onMeasure(RecyclerView.Recycler recycler, RecyclerView.State state, int widthSpec, int heightSpec) { final int widthMode = View.MeasureSpec.getMode(widthSpec); final int heightMode = View.MeasureSpec.getMode(heightSpec); final int widthSize = View.MeasureSpec.getSize(widthSpec); final int heightSize = View.MeasureSpec.getSize(heightSpec); int width = 0; int height = 0; for (int i = 0; i < getItemCount(); i++) { measureScrapChild(recycler, i, View.MeasureSpec.makeMeasureSpec(i, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec.makeMeasureSpec(i, View.MeasureSpec.UNSPECIFIED), mMeasuredDimension); if (getOrientation() == HORIZONTAL) { width = width + mMeasuredDimension[0]; if (i == 0) { height = mMeasuredDimension[1]; } } else { height = height + mMeasuredDimension[1]; if (i == 0) { width = mMeasuredDimension[0]; } } } switch (widthMode) { case View.MeasureSpec.EXACTLY: width = widthSize; case View.MeasureSpec.AT_MOST: case View.MeasureSpec.UNSPECIFIED: } switch (heightMode) { case View.MeasureSpec.EXACTLY: height = heightSize; case View.MeasureSpec.AT_MOST: case View.MeasureSpec.UNSPECIFIED: } setMeasuredDimension(width, height); } private void measureScrapChild(RecyclerView.Recycler recycler, int position, int widthSpec, int heightSpec, int[] measuredDimension) { View view = recycler.getViewForPosition(position); if (view != null) { RecyclerView.LayoutParams p = (RecyclerView.LayoutParams) view.getLayoutParams(); int childWidthSpec = ViewGroup.getChildMeasureSpec(widthSpec, getPaddingLeft() + getPaddingRight(), p.width); int childHeightSpec = ViewGroup.getChildMeasureSpec(heightSpec, getPaddingTop() + getPaddingBottom(), p.height); view.measure(childWidthSpec, childHeightSpec); measuredDimension[0] = view.getMeasuredWidth() + p.leftMargin + p.rightMargin; measuredDimension[1] = view.getMeasuredHeight() + p.bottomMargin + p.topMargin; recycler.recycleView(view); } } } 

Después de esto. Cambia esto:

  mProductsRecyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext())); 

A esto:

 mRecyclerView.setLayoutManager(new MyLinearLayoutManager(getApplicationContext(),1,false)); 

Tres nuevos parámetros (Context, int Orientation, boolean reverse); Básicamente, puse 1 para la orientación, por lo que se muestra de forma vertical, y como falso para la inversión, de modo que se muestra cómo se ordena en mi Lista.

Enlaces a la pregunta de otras personas con el mismo problema que yo. La altura de la vista del reciclador nested no envuelve su contenido

La altura de la vista del reciclador nested no envuelve su contenido

Gracias una vez más chicos. Espero que esto ayude a alguien más

Agregue este código en su actividad, establecerá el alto de su vista de reciclador en el 90% de la ventana de la pantalla del usuario.

 DisplayMetrics displaymetrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); int a = (displaymetrics.heightPixels*90)/100; recylcerView.getLayoutParams().height =a; 

y su diseño de comentarios debajo de su reciclador.

Me gusta esto

          

Encontré otra solución. Si va a envolver recyclerview en RelativeLayout, resolverá el problema fácilmente. Gracias.