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
- ¿Es posible ajustar el adaptador al diseño lineal?
- SimpleOnGestureListener no funciona para ScrollView
- Stop scrollView en el centro del rollo
- ¿Cómo puedo obtener una función de paginación en vista de desplazamiento horizontal sin ViewPager?
- ListView no desplazable dentro de ScrollView
- ¿Por qué mi ScrollView es demasiado ancha sólo cuando no necesita desplazarse?
- ¿El oyente Scrollview no está trabajando en Xamarin para Android?
- Desplácese nestedscrollview para finalizar antes de que los rollos de reciclerview para niños
- Correctamente desplazando un EditText a la vista cuando se enfoca
- Si ScrollView sólo admite a un hijo directo, ¿cómo se supone que puedo hacer que un diseño completo se pueda desplazar?
- ListView dentro de ScrollView no se desplaza en Android
- Cómo obtener NUEVA anchura / altura del diseño raíz en onConfigurationChanged?
- LinearLayout achartengine El gráfico no se muestra en ScrollView
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);
- Modificar el color de un androide drawable
- ¿Por qué utilizar Fragment # setRetainInstance (boolean)?