En-têtes ListView sans séparateurs d'éléments de liste

J'écris actuellement une application Android qui utilise ListView avec des en-têtes. Ça marche bien, mais pas vraiment comme je le veux. Chaque élément dans ListView comporte un séparateur 1-2px en haut et en bas de celui-ci. De même, l'en-tête – et c'est le problème. Il ne semble pas très joli …

Feux séparateurs entre les éléments et les en-têtes

  • Comment détruire Fragment?
  • Android - Est-il possible de déclarer un masque alpha directement dans la définition XML de la liste des couches?
  • L'installation n'a pas pu finaliser la session ... Les signatures sont incohérentes - Android
  • Android: comment formater le numéro en tant que téléphone avec des parenthèses
  • Application web HTML5 vs applications mobiles natives
  • Android.support.v7.widget.AppCompatTextView ne peut pas être diffusé sur android.widget.RelativeLayout
  • La partie intéressante est que les applications système (comme Paramètres, par exemple) n'ont pas de problème.

    Application Paramètres

    Voici mon exemple d'adaptateur:

    setListAdapter(new BaseAdapter() { @Override public int getCount() { return 10; } @Override public Object getItem(int i) { return i; } @Override public long getItemId(int i) { return i; } @Override public View getView(int i, View view, ViewGroup viewGroup) { View v = ((LayoutInflater)getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE)) .inflate(i % 3 == 0 ? R.layout.list_header : android.R.layout.simple_list_item_1, viewGroup, false); ((TextView)v.findViewById(android.R.id.text1)).setText("test"); return v; } }); 

    Et le fichier de présentation d'en-tête de liste:

     <?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/text1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Hello, World" style="?android:attr/listSeparatorTextViewStyle"> </TextView> 

    La question est donc: comment se débarrasser des séparateurs d'éléments entre les en-têtes et les éléments réguliers, comme par exemple, l'application Paramètres?

    EDIT: Après avoir lu les réponses, je veux effacer une chose. Je ne veux pas supprimer complètement les séparateurs. Je souhaite les supprimer uniquement entre les éléments d'en-tête et les éléments réguliers. En outre, des demi-mesures comme "enlever complètement les séparateurs et les ajouter à certains articles" ne me satisfont pas aussi.

  • Accédez au GPS sur Android à partir de C ++
  • Android: comment étendre et réduire la taille de la carteVer RecyclerView
  • Android: comment dessiner une bordure vers un LinearLayout
  • Existe-t-il un moyen de faire répartir un groupe de radio horizontalement?
  • RecyclerView ViewPager java.lang.NullPointerException android.support.v7.widget.RecyclerView $ ItemAnimator $ ItemHolderInfo.left
  • Android: configuration alternative xml pour le mode paysage
  • 4 Solutions collect form web for “En-têtes ListView sans séparateurs d'éléments de liste”

    Il semble que vous devez utiliser une vue d'élément personnalisée pour les diviseurs et une solution de contournement. Permettez-moi d'expliquer comment gérer ceci:

    • N'utilisez pas les séparateurs par défaut, retirez-le .
    • Créez une mise en page personnalisée avec une View en bas pour être la sous-chaîne pour les en-têtes.
    • Créez une mise en page personnalisée avec une View en haut pour avoir le diviseur pour les éléments.

    Ensuite, les deux types de diviseurs seront la colle pour créer une seule sous-unité pour la partie d'en-tête, de sorte que les diviseurs doivent avoir la même hauteur afin de créer une bonne sous-couche. Cela évitera d'avoir un diviseur au-dessus des sections d'en-tête, mais en gardant les séparateurs pour la liste des éléments.

    Par conséquent, permettez-moi de montrer un code pour l'atteindre. Tout d'abord, n'oubliez pas d'éviter le diviseur par défaut sur ListView :

     <ListView android:id="@+id/listview" android:layout_width="match_parent" android:layout_height="match_parent" android:divider="@null" android:dividerHeight="0dp"/> 

    Créez une disposition d'élément avec un diviseur en haut défini sur 1dp (ou quoi que ce soit):

     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <!-- this is the divider for items --> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="@android:color/darker_gray"/> <!-- and the rest of item's content in another ViewGroup --> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:padding="10dp" android:orientation="horizontal"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@mipmap/ic_launcher"/> <TextView android:id="@+id/item_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingLeft="15dp" android:textColor="@android:color/white"/> </LinearLayout> </LinearLayout> 

    Enfin, la disposition des en-têtes avec un diviseur en bas (avec la même hauteur que le diviseur de l'élément):

     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:id="@+id/item_header" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="10dp" style="?android:attr/listSeparatorTextViewStyle"/> <!-- this is the ("half-")divider for header section --> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="@android:color/darker_gray"/> <!-- this view above will be merged with item's dividers --> </LinearLayout> 

    Et cela donne ce résultat:

    Supprimez le style que vous avez défini pour l'en-tête TextView

    Créez votre propre style personnalisé avec le diviseur requis et configurez-le dans TextView

      <style name="CustomListSeperatorTextViewStyle" parent="Widget.TextView.ListSeparator"> <item name="android:background">@drawable/your_own_here</item> 

    Seperator est dû au style que vous avez défini avec la visualisation de texte, supprimez simplement le style d'espoir, cela fonctionnera.

    Je viens de trouver ces paramètres qui semblent être ce dont vous avez besoin, vous pouvez essayer de les ajouter dans votre ListView :

     android:headerDividersEnabled="false" android:footerDividersEnabled="false" 

    La documentation est disponible ici et indique:

    Lorsqu'il est défini sur false, ListView ne dessine pas le diviseur après chaque vue d'en-tête. La valeur par défaut est vraie.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.