web-dev-qa-db-fra.com

ExpandableListView - Comment définir le diviseur uniquement entre les éléments parents

Je veux mettre séparateur uniquement entre les éléments parents. Quand j'ai mis

Android:divider="@drawable/divider"
Android crée un séparateur entre les éléments parents, mais crée également un séparateur entre les éléments enfants. Quand j'ajoute 
Android:childDivider="@color/transparent"
Android supprime le séparateur entre les éléments enfants, mais l'espace libre entre eux reste. Pourquoi? J'ai essayé de 
Android:dividerHeight="0dp"
mais rien ne s'est passé.

Du tout, je veux définir un séparateur entre les éléments parents, mais je ne veux pas de séparateur ni d'espace vide entre les éléments enfants.

des idées comment faire ça?

18
Plamen Nikolov

Pour supprimer uniquement les séparateurs des vues enfant et non entre les parents de la liste extensible:

ajoutez Android:childDivider="#00000000" dans les attributs ExapandableListView en XML:

<ExpandableListView
    Android:id="@+id/elv"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:childDivider="#00000000" />

Référez-vous cette page pour plus d'informations

24
Amala Ray

Donne la couleur et la hauteur du séparateur (les séparateurs seront visibles lorsque les groupes seront réduits)

<ExpandableListView
        Android:id="@+id/list"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:divider="@color/color_black"
        Android:dividerHeight="1dp"
        Android:groupIndicator="@null" />
5
Ravi Yadav

L'astuce consiste à créer une variable supplémentaire view pour réduire la disposition du groupe et la dernière disposition enfant.

collapse_group.xml:

<LinearLayout
    Android:orientation="vertical"
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"
    Android:background="@Android:color/transparent">

    <TextView
         Android:layout_width="wrap_content"
         Android:layout_height="wrap_content"
         Android:textSize="17sp"/>

    <!-- this is the extra view-->  
    <View 
       Android:layout_width="fill_parent"
       Android:layout_height="10dp"
       Android:background="@Android:color/transparent"/>        

</LinearLayout>

expand_group.xml:

<LinearLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:orientation="vertical"
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"
    Android:background="@Android:color/transparent">

    <TextView
         Android:layout_width="wrap_content"
         Android:layout_height="wrap_content"
         Android:textSize="17sp"/>

    <!-- no extra view-->       

</LinearLayout>

Et appliquez la même technique à la vue enfant, pour la dernière vue enfant insérez la vue supplémentaire

4
ferry

Ce que j'ai fait était de définir le diviseur d'ExtensibleListView sur 0, puis d'insérer des groupes de "séparateurs" dans son extension ExpandListAdapter:

// To get dividers between the groups we add 'divider views' as if they were  
// themselves groups.
public int getGroupCount() {
// Actual groups are at even groupPositions, dividers at odd
    return (this.data.size() * 2) - 1;
}

public long getGroupId(int groupPosition) {
    if(groupPosition % 2 != 0) return R.id.divider;
    else return R.id.group;
}

public View getGroupView(int groupPosition, boolean isExpanded,
        View convertView, ViewGroup parent) {
    if(groupPosition % 2 != 0) {
        View divider = convertView;
        if(divider == null || divider.getId() != R.id.divider) {
            divider = this.inflater.inflate(R.layout.divider, null);
        }

        return divider;
    }

    View group = convertView;
    if(group == null || group.getId() != R.id.group) {
        group = this.inflater.inflate(R.layout.group, null);
    }

    return group;
}
1
MZamkow

Si vous souhaitez supprimer uniquement le séparateur enfant, une astuce simple consiste à créer un dessin pouvant être dessiné avec la même couleur que la couleur d'arrière-plan de votre élément enfant. Puis définissez-le comme diviseur enfant.

ShapeDrawable sd1 = new ShapeDrawable(new RectShape());
    sd1.getPaint().setColor(YOUR CHILD ITEM BACKGROUND COLOR);
    mExpListView.setChildDivider(sd1);

Ou en utilisant xml:

Android:childDivider="@color/child_bg_color"
1
Amit
expListView.setDividerHeight(10);
expListView.setChildDivider(getResources().getDrawable(
            Android.R.color.white));
1
Dhiraj Himani

Si vous souhaitez avoir un séparateur entre les éléments parents de ExpandableListView (en-tête) et que vous ne voulez pas séparer les enfants et les parents, ce qui est évidemment le cas le plus naturel, vous devez procéder comme suit:

  1. Dans votre fichier XML parent, ajoutez une vue au bas de la présentation avec la hauteur et la couleur de séparation dont vous avez besoin. Exemple:

  2. Faites la même chose dans le fichier XML enfant. Ajoutez une vue en bas de la mise en page avec la hauteur et la couleur de séparation dont vous avez besoin. Assurez-vous que la couleur et la hauteur du séparateur sont identiques à celles du parent xml.

  3. Dans votre méthode ExpandableListView Adapter Public View getGroupView (int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) Gérer l'état du diviseur View de la manière suivante: Exemple:

    if (isExpanded) { headerDividerView.setBackgroundColor (ContextCompat.getColor (contexte, R.color.darker_grey)); } autre { headerDividerView.setBackgroundColor (ContextCompat.getColor (contexte , Android.R.color.transparent)); }

BTW: Dans mon cas, R.color.darker_grey est la couleur de fond du parent

  1. Supprimez de votre ExpandableListView xml tous les séparateurs et leurs hauteurs. Faites en sorte que ExpandableListView ne contienne pas de séparateurs ni de hauteur. Vous pouvez utiliser des attributs comme ceci:

    Android: groupIndicator = "@ null" Android: childIndicator = "@ null" Android: divider = "@ null" Android: dividerHeight = "0dp"

0
Sniper