86 votes

Ajout d'une marge inférieure au dernier élément du ListView

J'ai besoin d'ajouter à un ListView des éléments compliqués background : différent pour even/odd et coins arrondis en haut et en bas. Cela ressemble à ceci :

ListView top

J'ai implémenté tout cela via level-list, mais il y a encore une chose que je veux faire. Maintenant, l'élément du bas est près du bas de l'écran. Il est préférable d'ajouter un peu d'espace.

ListView bottom looks not good

Je ne veux pas ajouter de marge inférieure au ListView, j'ai besoin d'une marge uniquement pour le dernier élément.

Les moyens que je vois pour y parvenir :

Pied de page

Une sorte de hack - ajouter un pied de page avec un TextView vide à ListView. Mais les pieds de page sont des choses assez instables, ils disparaissent généralement après notifyDataSetChanged et il n'y a aucun moyen de les récupérer.

Image avec des pixels transparents

J'ai demandé au designer d'ajouter des pixels transparents à la ressource de fond inférieure. Malheureusement, dans ce cas, le centrage vertical est complètement cassé. Par exemple, il y a 9patchs comme celui-ci :

9patch

Et une disposition comme celle-ci :

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
        >
    <!-- View with background with transparent pixels on bottom -->
    <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"
                  android:id="@+id/item"
                  android:background="@drawable/some_bgr"
                  android:padding="10dp"
            >
        <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1"
                  android:text="Title"
                  android:layout_gravity="center"
                  android:textSize="18sp"
                />
        <TextView android:layout_width="wrap_content" android:layout_height="wrap_content"
                  android:text="Detail"
                  android:layout_gravity="center"
                  android:textSize="18sp"
                />
    </LinearLayout>

    <!-- Just for marking place took by view -->
    <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent"
                 android:layout_below="@id/item"
                 android:background="#88ff55"
            />
</RelativeLayout>

Le résultat :

Result

Comme vous le voyez, le centrage ne fonctionne pas. Malheureusement. (BTW, si vous spécifiez ce 9patch comme fond pour le TextView, le centrage fonctionne bien. Si vous connaissez un article, expliquant cela, faites le moi savoir).

Ajouter une marge inférieure au dernier élément dans la mise en œuvre de l'adaptateur

Ça devrait marcher, mais pour une raison inconnue, je n'arrive toujours pas à le faire fonctionner. Je n'aime pas cette méthode, car je n'aime pas modifier les dimensions dans le code.

Alors

Il existe déjà un moyen imaginaire de construire un dessinable XML avec un bitmap et une marge particuliers. Selon le concept de drawables, cela devrait être possible, mais je ne trouve pas d'implémentation. Peut-être que quelqu'un le sait ?

D'autres idées ?

0voto

minimalist Points 104

Une autre solution pourrait consister à créer une vue fictive d'une certaine hauteur.

Dans votre adaptateur, dans getViewCount, vous retournez 2.

Dans getCount, il faut renvoyer yourData.size+1.

Dans getViewType vérifier si l'élément est le dernier élément retourner 2 ;

Utilisez ce type dans getView pour remplir le mockview.

-2voto

Goofy Points 1739

Je suppose que vous voulez ajouter une marge uniquement au dernier élément :

Vous pouvez donc procéder de la manière suivante : dans votre méthode getview, vous récupérez l'index de l'élément de la liste et vérifiez si c'est le dernier élément, puis vous ajoutez progressivement la marge à la vue.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X