C'est une très bonne question sur la disposition des éléments dans un ListView sous Android.
J'ai une activité avec une barre de titre en haut et un ListView occupant le reste de l'écran. Je veux que mon ListView apparaisse avec un rembourrage de 10dp à gauche, à droite et en haut, mais lorsque vous faites défiler le ListView vers le haut, je veux qu'il couvre le remplissage de 10dp supérieur avant de disparaître sous le bord fané. De même, lorsque vous faites défiler vers le bas, le dernier élément de la liste devrait apparaître avec 10dp entre le bas du dernier élément de la liste et le bas réel de l'écran (si vous vous demandez pourquoi, c'est parce qu'il y a une jolie image de fond que je veux poussant autour de la ListView).
J'ai essayé d'ajouter un rembourrage au ListView lui-même, mais lorsque vous faites défiler la liste, il disparaît sous le bord du rembourrage.
Je viens d'un contexte de développement Web et l'analogie serait d'ajouter une marge au-dessus du premier élément de la liste (et en dessous du dernier élément de la liste).
la source
getListView(). addHeaderView(capView)
etgetListView(). addHeaderView(botView)
assurez-vous qu'il est appelé avant d'initialiser le contenu de la liste, par exemple. setListAdapter (adaptateur);Réponses:
Tu as écrit:
Définissez l'
ListView's
clipToPadding
attribut surfalse
. Cela activera le remplissage autour duListView
et le défilement jusqu'à la fin de la mise en page (et pas seulement jusqu'au bord du remplissage).Un exemple:
android:clipToPadding
est un attribut XML deViewGroup
, la classe de base pour les présentations et les conteneurs de vues.L' appel de méthode associé est:
la source
<item name="android:clipToPadding">false</item>
clipToPadding
via un style ne fonctionne pas pour moi, c'est comme s'il ne s'appliquait pas. Bien que, si je le place directement sur ListView, cela fonctionne.android:scrollbarStyle="outsideOverlay"
que la barre de défilement traverse également le remplissageLe ListView ci-dessus aura un remplissage d'en-tête et de pied de page de 20 pixels.
la source
float mDensity = getResources().getDisplayMetrics().density; int height = (int) (50 * mDensity + 0.5f); padding.setHeight(height);
(int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 100, getResources().getDisplayMetrics());
Annexe à la réponse de @ Jakobud ...
Mon listView utilisait déjà les
android:divider/android:dividerHeight
propriétés pour créer des espaces transparents entre les éléments listView. Cela m'a permis d'ajouter simplement lesandroid:headerDividersEnabled
etandroid:footerDividersEnabled
propriétés et définissez les vues en- tête et pied de page ànew View(Activity.this)
.Légère simplification pour les cas où vous avez déjà configuré des diviseurs dans la listView.
la source
Ma solution utilisant a
ListFragment
, basée sur les solutions de @Jakobud et @ greg7gkb.la source
La réponse de @Gunnar Karlsson est bonne, mais il y a un problème de recyclage prématuré des vues de cellule lorsqu'elles sont complètement derrière le rembourrage, mais pas encore complètement hors de l'écran. La définition de clipToPadding = false en est responsable et peut ou non être corrigée dans une future version d'Android ( lors de l'utilisation de clipToPadding dans ListView, les éléments sont recyclés prématurément )
J'ai une belle solution simple sans effets secondaires:
android:dividerHeight="-10dip"
, l'opposé de ce qui entoure la cellulePar rapport à l'autre réponse, il n'est pas nécessaire de définir la couleur du séparateur. Le rembourrage des cellules les plus hautes et les plus basses sera présent et le diviseur négatif empêchera les diviseurs à double hauteur entre les deux.
la source