Cómo poner GridView en ScrollView

Tengo que diseñar la disposición tal que la disposición entera debe desplazarse y el diseño interior tengo que exhibir el contenido relacionado en forma de la Grid así que decidí utilizar GridView Pero el problema es que no puedo utilizar GridView dentro ScrollView He leído la documentación (la documentación también Diciendo que no deberíamos usar GridView dentro de ScrollView ) también. Pero tengo que hacer esto, por lo que cualquiera puede darme alguna idea acerca de esto. Gracias

Definitivamente hay beneficios para un GridView junto al desplazamiento inherente. Por ejemplo, un diseño consistente y dinámico de celdas que se expandirán y se contraerán basándose en los datos que pasen a él. Por lo tanto, cuando la gente dice que no es bueno desear tal funcionalidad, creo que está mal porque podría desear la cuadrícula dinámica de imágenes (vistas) dentro de una vista de desplazamiento, pero desea que toda la vista de desplazamiento contenga otras cosas que no sea la cuadrícula Células.

Ahora, aquí es cómo usted puede hacer esto. Compruebe la respuesta aquí . Es una altura ampliable GridView, que usted querrá importar / crear en su proyecto. Lo que básicamente significa es que a medida que más elementos se agregan a la GridView, sólo se ampliará su altura, en lugar de mantener su altura y el conjunto de desplazamiento. Esto es exactamente lo que quieres.

Una vez que tenga el ExpandableHeightGridView en su proyecto, vaya a su diseño XML donde desea que el GridView sea. A continuación, puede hacer algo como esto (parafraseando):

 <ScrollView ...> <RelativeLayout ...> <com.example.ExpandableHeightGridView ... /> <other view items /> </RelativeLayout> </ScrollView> 

A continuación, en la actividad en la que estableció el adaptador de GridView, debe asegurarse de configurarlo para que se expanda. Asi que:

 ExpandableHeightGridView gridView = (ExpandableHeightGridView) findViewById(R.id.myId); gridView.setAdapter(yourAdapter); gridView.setExpanded(true); 

La razón por la que desea este GridView expandible es porque, el hecho de que un GridView estándar no se expanda es lo que hace que se desplace. Se pega a una cierta altura y, a medida que más elementos se llenan más allá de sus límites de vista, se vuelve desplazable. Ahora, con esto, su GridView siempre ampliará su altura para ajustarse al contenido dentro de ella, por lo que nunca le permitirá entrar en su modo de desplazamiento. Esto le permite usarlo dentro del ScrollView y utilizar otros elementos de vista arriba o debajo de él dentro del ScrollView, y hacer que todos se desplacen.

Esto debería darle el resultado que está buscando. Hazme saber si tienes alguna pregunta.

Sé que estoy tarde, pero tengo otra solución que debo compartir y que funciona perfectamente. Aquí, el método calcula la altura de GridView en función del número de elementos que contiene y establece la altura en GridView en tiempo de ejecución.

 public void setGridViewHeightBasedOnChildren(GridView gridView, int columns) { ListAdapter listAdapter = gridView.getAdapter(); if (listAdapter == null) { // pre-condition return; } int totalHeight = 0; int items = listAdapter.getCount(); int rows = 0; View listItem = listAdapter.getView(0, null, gridView); listItem.measure(0, 0); totalHeight = listItem.getMeasuredHeight(); float x = 1; if( items > columns ){ x = items/columns; rows = (int) (x + 1); totalHeight *= rows; } ViewGroup.LayoutParams params = gridView.getLayoutParams(); params.height = totalHeight; gridView.setLayoutParams(params); } 

Después de haber llamado a setAdapter en su gridview, solo llame

 setGridViewHeightBasedOnChildren( <yourGridView> , <no of grid view columns> ) 

Y funcionará.

Puede definir el gridview en su xml como lo hace normalmente

Y dejar que el código se encargue de ello. 🙂

Encontré una manera de darle a GridView un tamaño fijo dentro de ScrollView , y activarlo . Eso le permite ver todo el ScrollView sin tener que desplazar todos los elementos del GridView, y tiene más sentido para mí que el uso de un ExpandableHeightGridView .

Para ello, tendría que implementar una nueva clase extendiendo GridView y reemplazando onTouchEvent () para llamar a requestDisallowInterceptTouchEvent (true) . Por lo tanto, la vista principal dejará los eventos de toque de interceptación de cuadrícula.

GridViewScrollable.java:

 package com.example; import android.content.Context; import android.util.AttributeSet; import android.view.MotionEvent; import android.widget.GridView; public class GridViewScrollable extends GridView { public GridViewAdjuntos(Context context) { super(context); } public GridViewAdjuntos(Context context, AttributeSet attrs) { super(context, attrs); } public GridViewAdjuntos(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override public boolean onTouchEvent(MotionEvent ev){ // Called when a child does not want this parent and its ancestors to intercept touch events. requestDisallowInterceptTouchEvent(true); return super.onTouchEvent(ev); } } 

Añadir en su diseño con las características y los márgenes que desee, dentro de un ScrollView:

 <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:isScrollContainer="true" > <com.example.GridViewScrollable android:id="@+id/myGVS" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:numColumns="auto_fit" android:stretchMode="columnWidth" /> </ScrollView> 

Y sólo tienes que en su actividad:

 GridViewScrollable myGridView = (GridViewScrollable) findViewById(R.id.myGVS); 

Espero que ayude =)

Para usar gridview dentro de scrollview, defina scrollview android: fillViewport = "true"

Sé que es tarde para responder aquí, pero puede ser útil para algunos nuevos desarrolladores.

Si ha utilizado la respuesta de dennisdrew y tiene contenido por encima de su cuadrícula y se oculta al abrir su vista simplemente agregue la última línea abajo

 ExpandableHeightGridView gridView = (ExpandableHeightGridView) findViewById(R.id.myId); gridView.setAdapter(yourAdapter); gridView.setExpanded(true); gridView.setFocusable(false); 
  • ScrollView corta la parte superior y deja espacio en la parte inferior
  • Gridlayout + ScrollView
  • Android scrollview ocultar contenido superior
  • ¿Cómo distinguir el desplazamiento del usuario final de un androide ScrollView desde el desplazamiento programático?
  • ¿Cómo desplazarse a la parte superior del diseño de ScrollView largo?
  • Función de desplazamiento de listview dentro de la vista de desplazamiento
  • ¿Es posible soportar una función setScrollY () (ScrollView API 14) como función para los antiguos niveles de API?
  • Actualización de contenido de ScrollView
  • Scrollview vertical y horizontal en android
  • Múltiples WebViews en ScrollView dando problemas (Android)
  • ScrollView: Pasa los eventos de toque a los niños
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.