Comment définir la hauteur de ListView est étonnamment compliqué.
Avec wrap_contents
, il en devient un, ou les éléments débordent et débordent en fonction de l'appareil ...
Même si je le cherche, je peux en trouver beaucoup, mais je pensais que ce ne serait pas facile à faire car il y avait beaucoup de choses qui déroutaient de manière inattendue, comme une référence profonde et un effondrement sans être conscient du cycle de vie.
Par conséquent, il peut être facilement implémenté en utilisant les fonctions décrites plus loin.
Appliquez simplement l'adaptateur, préparez cette fonction pour la vue de liste qui contient les données que vous souhaitez afficher et transmettez la vue de liste comme argument.
Si vous souhaitez modifier dynamiquement une partie de la hauteur, je pense que ce sera plus propre si vous ajoutez une syntaxe de contrôle, etc. dans l'instruction for.
Java
ListViewUtil.java
public static void setListViewHeightBasedOnChildren(ListView listView) {
//Obtenir ListAdapter
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
//chèque nul
return;
}
//Initialisation
int totalHeight = 0;
//Mesurez la hauteur de chaque élément et ajoutez
for (int i = 0; i < listAdapter.getCount(); i++) {
View listItem = listAdapter.getView(i, null, listView);
listItem.measure(0, 0);
totalHeight += listItem.getMeasuredHeight();
}
//Obtenir LayoutParams
ViewGroup.LayoutParams params = listView.getLayoutParams();
//(Hauteur du séparateur*Nombre d'éléments)Je vais juste ajouter
params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
//Je définirai la hauteur sur LayoutParams
listView.setLayoutParams(params);
}
Kotlin
ListViewUtil.kt
fun setListViewHeightBasedOnChildren(listView:ListView) {
//Obtenir ListAdapter
val listAdapter = listView.getAdapter()
if (listAdapter == null)
{
//chèque nul
return
}
//Initialisation
val totalHeight = 0
//Mesurez la hauteur de chaque élément et ajoutez
for (i in 0 until listAdapter.getCount())
{
val listItem = listAdapter.getView(i, null, listView)
listItem.measure(0, 0)
totalHeight += listItem.getMeasuredHeight()
}
//Obtenir LayoutParams
val params = listView.getLayoutParams()
//(Hauteur du séparateur*Nombre d'éléments)Je vais juste ajouter
params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1))
//Je définirai la hauteur sur LayoutParams
listView.setLayoutParams(params)
}
S'il existe une meilleure méthode de mise en œuvre, apprenez-moi s'il vous plaît.
Article de référence: Android Listview Measure Height
Recommended Posts