[JAVA] [Android] Définir dynamiquement la hauteur de ListView avec copie (pour les débutants)

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

[Android] Définir dynamiquement la hauteur de ListView avec copie (pour les débutants)
[Android] [Java] Gérer l'état de CheckBox de ListView
L'histoire du réglage de l'application Android avec libGDX
Développement d'Android Studio pour la première fois (pour les débutants)
[Pour les débutants] Comprendre rapidement les bases de Java 8 lambda
<Android> Changer la couleur d'arrière-plan de la ligne Liste de ListView
Ajustez automatiquement la hauteur de la boîte de dialogue WebView avec la taille du contenu
J'ai essayé de me permettre de définir le délai pour le client Android UDP
Je vais expliquer l'imbrication des déclarations qui tuent les débutants
[Swift] Comment modifier dynamiquement la hauteur de la barre d'outils sur le clavier
[Android Studio] Définir une image arbitraire pour l'arrière-plan de l'application [Java]
[Eclipse / github] Partageons le projet créé avec eclipse sur github Pour les débutants
[Android Studio] [Pour les débutants] Expliquons grossièrement l'écran et le répertoire
À propos des bases du développement Android
[Pour les débutants] Résumé du constructeur java
Construction d'environnement avec Docker pour les débutants
Liens pour créer des applications Android (pour les débutants)
Notes pour les débutants en développement d'applications Android
Mémorandum d'utilisation de l'inspecteur de bureau Appium dans l'émulateur (application Android)
Définissez le nombre de secondes d'avance et de retour rapides dans ExoPlayer
L'histoire de la sortie de l'application Android sur le Play Store pour la première fois.
[Rails] Articles pour les débutants pour organiser et comprendre le flux de form_with
(Mémo) Obtenez un ensemble de jars de bibliothèque dépendants à l'aide de Gradle