sur ma mise en page de mon fragment, j'ai une vue de défilement imbriquée avec deux dispositions relatives à l'intérieur, en haut et en bas, au fond, j'ai une liste de réception avec une vingtaine d'éléments d'environ vingt éléments, mais si je défini la hauteur de la liste de liste avec WraP_Content, une seule ligne est montré, alors que si je défini la hauteur sur 1000DP, par exemple, toutes les lignes sont affichées, je ne voudrais pas réparer la hauteur de manière statique mais je préférerais utiliser WraP_Content, que puis-je faire?
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="vertical"> <android.support.v4.widget.NestedScrollView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/nested_content" android:clipToPadding="false" android:scrollbars="none" app:layout_behavior="@string/appbar_scrolling_view_behavior"> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <RelativeLayout android:layout_width="match_parent" android:layout_height="300dp" android:id="@+id/top"> <RelativeLayout android:layout_width="match_parent" android:layout_height="200dp" //some button and text view </RelativeLayout> </RelativeLayout> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/bottom" android:layout_below="@id/top"> <ListView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/scores" </ListView> </RelativeLayout> </RelativeLayout> </android.support.v4.widget.NestedScrollView>
4 Réponses :
Vous pouvez utiliser la méthode utilitaire ci-dessous pour définir la hauteur de votre listview code> en fonction du nombre d'enfants.
public static void setListViewHeightBasedOnChildren(ListView myListView) {
ListAdapter adapter = myListView.getAdapter();
if (myListView != null) {
int totalHeight = 0;
for (int i = 0; i < adapter.getCount(); i++) {
View item= adapter.getView(i, null, myListView);
item.measure(0, 0);
totalHeight += item.getMeasuredHeight();
}
ViewGroup.LayoutParams params = myListView.getLayoutParams();
params.height = totalHeight + (myListView.getDividerHeight() * (adapter.getCount() - 1));
myListView.setLayoutParams(params);
}
}
Presque fonctionne, mais ce n'est pas complètement. Les calculs étaient toujours plus gros que cela, et les résultats ont toujours montré un espace vide à la fin. Ma solution utilisait réellement cette bibliothèque externe ( Github.com/paolorotolo/expandableHeightListView ) Comme suggéré par @ αλέξανδρος Τσιχουρίδης sur un commentaire ci-dessous
1.Remove the NéhscrollView
2. Ajoutez ceci à l'androïde: transcriptmode = "TOWSCROLL" comme celui-ci
<ListView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/scores" android:transcriptMode="alwaysScroll" </ListView>
Veuillez expliquer à l'op de quoi cela va faire i>.
J'ai besoin de tout le fragment pour faire défiler non seulement la vue de la liste
Vous pouvez consulter cette Vue de la liste de hauteur extensible . P>
J'utilise personnellement celui-ci: GridView Hauteur exapandable et est la même philosophie avec le < Un href = "https://github.com/paolorotolo/expandableHeightListView" rel = "Nofollow NOREFERRER"> Vue de la liste de hauteur extensible . P>
homme, c'est un type de relativenelayout blitzkrieg. Mais si c'est ce dont vous avez besoin pour correspondre à votre fonctionnalité, vous devriez peut-être essayer de définir la NESTCrollView pour remplir sa fenêtre.
Android: FidViedPort = "vrai" p> a essayé cela avec une version "Deblitzkriéged" de ce que vous avez posté et cela fonctionne, peut-être que cela fonctionne également 4. p> mise à jour:
Vous avez raison, la approche supérieure vous laisserait avec un fragment non défilé. P> i Définir aussi p> p> Android: Néhscrollingenabled = "vrai" code> sur la liste de liste et l'a instantanément oubliée.
Si quelqu'un est toujours intéressé par un échantillon de code, voir l'exemple ci-dessous. P>
Cela ne permet pas le fragment de faire défiler, meybe car les éléments de liste affichés sont autant que vous pouvez entrer à partir de l'endroit où la liste de réception commence à l'endroit où l'écran se termine. S'il y avait plus d'éléments que ceux-ci, ils ne sont pas montrés
Où est votre adaptateur signifie listView items XML Fichier?