J'essaie de mettre le GridView dans ScrollView dans Android. Quand je mets le GridView ne fonctionne pas.
Voici la mise en page.
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/scroll_home"
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
<RelativeLayout
Android:id="@+id/layout_home"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content">
<GridView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/programacao_grid"
Android:numColumns="auto_fit"
Android:gravity="center"
Android:columnWidth="50dp"
Android:stretchMode="columnWidth"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:layout_below="@+id/calendario_programacao"
>
</GridView>
</RelativeLayout>
</ScrollView>
Après de nombreuses recherches, la réponse a été trouvée et elle est ci-dessous
Après la recherche, j'ai trouvé ce projet lien : -
ExpandableHeightGridView
classe
package xx.xxx.xx.view;
import Android.content.Context;
import Android.util.AttributeSet;
import Android.view.ViewGroup;
import Android.widget.GridView;
public class ExpandableHeightGridView extends GridView {
boolean expanded = false;
public ExpandableHeightGridView(Context context)
{
super(context);
}
public ExpandableHeightGridView(Context context, AttributeSet attrs)
{
super(context, attrs);
}
public ExpandableHeightGridView(Context context, AttributeSet attrs,
int defStyle)
{
super(context, attrs, defStyle);
}
public boolean isExpanded()
{
return expanded;
}
@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
// HACK! TAKE THAT Android!
if (isExpanded())
{
// Calculate entire height by providing a very large height hint.
// View.MEASURED_SIZE_MASK represents the largest height possible.
int expandSpec = MeasureSpec.makeMeasureSpec(MEASURED_SIZE_MASK,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
ViewGroup.LayoutParams params = getLayoutParams();
params.height = getMeasuredHeight();
}
else
{
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}
public void setExpanded(boolean expanded)
{
this.expanded = expanded;
} }
layout.xml
fichier:
<ScrollView
Android:id="@+id/sc_spots"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:fillViewport="true" >
<xx.xxx.xx.view.ExpandableHeightGridView
Android:id="@+id/spotsView"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginTop="15dp"
Android:layout_marginBottom="15dp"
Android:layout_marginLeft="5dp"
Android:layout_marginRight="5dp"
Android:horizontalSpacing="10dp"
Android:isScrollContainer="false"
Android:numColumns="5"
Android:stretchMode="columnWidth"
Android:verticalSpacing="10dp" />
</ScrollView>
Utilisation de la classe GridView
mGridView = (ExpandableHeightGridView)
getView().findViewById(R.id.spotsView);
mGridView.setExpanded(true);
SpotsAdapter adapter = new SpotsAdapter(getActivity(),R.layout.spot_item,params);
mGridView.setAdapter(adapter);
adapter.notifyDataSetChanged();
Cela fonctionne pour moi
// Setting on Touch Listener for handling the touch inside ScrollView
gridView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
v.getParent().requestDisallowInterceptTouchEvent(true);
return false;
}
});
Juste pour mentionner que, la solution fournie par @Igor Ronner est excellente, mais a quand même fait la moitié de mon application pour une raison inconnue - dans une vue de défilement, la vue de la grille est à plat comme si elle n'existait pas du tout.
Cela m'a pris près d'une demi-journée avec de nombreuses tentatives pour remplir l'autre moitié - utilisez une disposition relative pour envelopper la vue de la grille pour la laisser se développer automatiquement, comme ceci (le code réel qui fonctionne finalement pour moi !!!):
<RelativeLayout
Android:id="@+id/grid_view_box"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/text_catalog"
>
<com.takken.app.Android.component.framework.ExpandableGridView
Android:id="@+id/grid_view"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:numColumns="2"
Android:horizontalSpacing="12dp"
Android:verticalSpacing="12dp"
/>
</RelativeLayout>