Das Festlegen der Höhe von ListView ist überraschend kompliziert.
Mit wrap_contents
wird es eins oder Elemente laufen je nach Gerät über und über ....
Selbst wenn ich nachschaue, kann ich viel davon finden, aber ich dachte, dass es nicht einfach sein würde, weil es viele Dinge gab, die unerwartet verwirrend waren, wie tiefe Bezugnahme und Zusammenbruch, ohne den Lebenszyklus zu kennen.
Daher kann es leicht implementiert werden, indem die später beschriebenen Funktionen verwendet werden.
Wenden Sie einfach den Adapter an, bereiten Sie diese Funktion für die Listenansicht mit den Daten vor, die Sie anzeigen möchten, und übergeben Sie die Listenansicht als Argument.
Wenn Sie einen Teil der Höhe dynamisch ändern möchten, wird es meiner Meinung nach sauberer, wenn Sie in der for-Anweisung Steuerungssyntax usw. hinzufügen.
Java
ListViewUtil.java
public static void setListViewHeightBasedOnChildren(ListView listView) {
//Holen Sie sich ListAdapter
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
//Nullprüfung
return;
}
//Initialisieren
int totalHeight = 0;
//Messen Sie die Höhe jedes Artikels und fügen Sie hinzu
for (int i = 0; i < listAdapter.getCount(); i++) {
View listItem = listAdapter.getView(i, null, listView);
listItem.measure(0, 0);
totalHeight += listItem.getMeasuredHeight();
}
//Holen Sie sich LayoutParams
ViewGroup.LayoutParams params = listView.getLayoutParams();
//(Trennhöhe*Anzahl der Elemente)Ich werde nur hinzufügen
params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
//Ich werde die Höhe auf LayoutParams setzen
listView.setLayoutParams(params);
}
Kotlin
ListViewUtil.kt
fun setListViewHeightBasedOnChildren(listView:ListView) {
//Holen Sie sich ListAdapter
val listAdapter = listView.getAdapter()
if (listAdapter == null)
{
//Nullprüfung
return
}
//Initialisieren
val totalHeight = 0
//Messen Sie die Höhe jedes Artikels und fügen Sie hinzu
for (i in 0 until listAdapter.getCount())
{
val listItem = listAdapter.getView(i, null, listView)
listItem.measure(0, 0)
totalHeight += listItem.getMeasuredHeight()
}
//Holen Sie sich LayoutParams
val params = listView.getLayoutParams()
//(Trennhöhe*Anzahl der Elemente)Ich werde nur hinzufügen
params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1))
//Ich werde die Höhe auf LayoutParams setzen
listView.setLayoutParams(params)
}
Wenn es eine bessere Implementierungsmethode gibt, bringen Sie mir dies bitte bei.
Referenzartikel: Android Listview Measure Height
Recommended Posts