studio - recyclerview android kotlin
Mida Recyclerview antes de que aparezca (2)
Actualmente estoy experimentando un problema al medir un recyclerView antes de que aparezca. Necesito la HeightHeight para comenzar una animación "expandir".
Esto se hizo anteriormente para un gridView en el código en el que estoy trabajando y estoy tratando de migrarlo a un RecyclerView con GridLayoutManager
final int widthSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
final int heightSpec = View.MeasureSpec.makeMeasureSpec(MEASURED_SIZE_MASK, View.MeasureSpec.AT_MOST);
mGridView.measure(widthSpec, heightSpec);
int targetHeight = mGridView.getMeasuredHeight();
Estaba trabajando con gridView, pero si invoco el método measure con las mismas especificaciones de medida en el recyclerView, el resultado siempre es 16777215, lo que creo que podría ser un valor máximo para algo, pero no puedo decir qué.
Vi una publicación que explica que una vista se puede medir antes de que se represente en la pantalla midiéndola con las siguientes especificaciones de medida:
final int widthSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
final int heightSpec = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);
pero obtengo 0 para recyclerView.getMeasuredHeight () ;.
¿Hay alguna manera de medir correctamente la altura del recyclerView antes de que se represente en la pantalla?
Gracias.
¿Estás tratando de medir la vista antes de agregarla? Si es así, eso es peligroso.
Además, en términos de RecyclerView, lamentablemente, los administradores de diseño existentes aún no son compatibles con WRAP_CONTENT. Confían en la implementación base que admite match_paren y dimensiones exactas.
Si conoce la altura de su artículo, puede extender GridLayoutManager, anular onMeasure y medirlo usted mismo.
Gracias a la publicación de yigit, finalmente pude calcular la altura del futuro reciclador. Al inflar manualmente la vista de un niño, lo mido con:
final int widthSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
final int heightSpec = View.MeasureSpec.makeMeasureSpec(MEASURED_SIZE_MASK, View.MeasureSpec.AT_MOST);
Y, finalmente, multiplicando su altura medida por el número de líneas contenidas en el gridLayoutManager. Espero que el soporte WRAP_CONTENT llegue pronto para los manejadores de diseño de RecycleViews.