Pour un GridView avec d'autres vues à l'intérieur du ScrollView sauvegardé pour faire défiler le tout, allez sur ce lien : http://www.londatiga.net/it/programming/Android/make-Android-listview-gridview-expandable-inside-scrollview/#comment-3967742 . Il est utile et m'a permis de gagner du temps, car je n'ai consacré que 5 minutes à cette tâche alors que je n'en avais jamais entendu parler.
Mise à jour :
A partir du lien, j'ai personnalisé un ExpandedGridView :
public class ExpandedGridView extends GridView {
boolean expanded = false;
public ExpandedGridView(Context context) {
super(context);
}
public ExpandedGridView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public ExpandedGridView(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.
// But do not use the highest 2 bits of this integer; those are
// reserved for the MeasureSpec mode.
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, 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;
}
}
Pour votre xml, changez le GridView pour l'ExpandedGridView qui a été personnalisé.
<com.your.package.ExpandedGridView
android:id="@+id/home_screen_list_goals"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:numColumns="2" />
Utilisation :
Appelez-la dans votre activité. Si vous êtes dans un fragment, utilisez contentView.findViewById(...)
. Quel ContentView est défini pour l'ensemble de votre mise en page.
ExpandedGridView gridView = (ExpandedGridView) findViewById(R.id.home_screen_list_goals);
//set data into grid view
gridView.setAdapter(YOUR_ADAPTER_OBJECT);
gridView.setExpanded(true);
0 votes
Le nombre d'images est-il fixe ou peut-il varier ?
0 votes
Avez-vous défini Android:layout_height="wrap_content" pour le GridView lorsque vous avez essayé de désactiver sa fonctionnalité de défilement ?
0 votes
Pearsonartphoto : Le nombre d'images varie.
0 votes
MisterSquonk : Oui, cela ne fonctionne pas. De plus, les GridViews à l'intérieur des ScrollViews ne sont pas considérés comme kasher d'après ce que j'ai lu. Par exemple, Romain Guy écrit : "ListView et GridView ne sont pas censés être intégrés l'un dans l'autre (il en va de même pour ScrollView.) Et quand je dis qu'ils ne sont pas censés, c'est qu'ils ne sont pas supportés pour le faire." J'ai mis à jour le post original avec une capture d'écran pour montrer à quoi cela ressemble avec les barres de défilement désactivées et ndroid:layout_height défini sur "wrap_content".
1 votes
Romain Guy aurait dû inclure un addHeader() dans le GridView. Il ne l'a pas fait, donc, nous devons le pirater ! !