web-dev-qa-db-fra.com

Mettez à droite l'indicateur d'une ExpandableListView dans Android

example

Je dois déplacer l'indicateur de gauche à droite (à cause de l'image plane). Je n'ai pas réussi non plus car la liste de visualisation extensible se trouve à l'intérieur d'un fragment et non à l'intérieur d'une activité entière. Une idée? Merci!

29
Filnik

Je ne connais pas de moyen de le faire à partir de XML mais je vais vous dire un moyen de le faire dynamiquement dans votre adaptateur.

Vous devez d'abord supprimer l'indicateur de groupe de votre xml

 <ExpandableListView [...] 
    Android:groupIndicator="@null" />

Ensuite, dans votre disposition du parent, ajoutez une image dans la bonne position de votre disposition.

Ensuite, dans votre adaptateur personnalisé, procédez comme suit

public View getGroupView(int groupPosition, boolean isExpanded,
        View convertView, ViewGroup parent) {
  ...

    if (isExpanded) {
        groupHolder.img.setImageResource(R.drawable.group_down);
    } else {
        groupHolder.img.setImageResource(R.drawable.group_up);
    }
  ...

}
119
Ahmed Zayed

Une autre solution est la suivante: 1) Définissez d'abord groupIndicator dans votre ExpandableListView sur @null:

<ExpandableListView [...] 
    Android:groupIndicator="@null" />

2) Créez ensuite le fichier group_indicator.xml avec les détails suivants:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:drawable="@drawable/down_icon" Android:state_selected="false"></item>
    <item Android:drawable="@drawable/up_icon" Android:state_selected="true"></item>
    <item Android:drawable="@drawable/down_icon"></item>
</selector>

3) Créez ensuite la disposition group_header.xml avec les détails suivants et gonflez cette disposition dans la méthode getGroupView () de ExpandableListAdapter.Java:

<?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="wrap_content"
    Android:padding="10dp">

    <TextView
        Android:id="@+id/tvHeader"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_alignParentLeft="true"
        Android:textColor="@color/white"
        Android:layout_centerVertical="true"
        Android:textSize="16sp"/>

    <ImageView
        Android:id="@+id/ivGroupIndicator"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:background="@drawable/group_indicator"
        Android:layout_centerVertical="true"
        Android:layout_alignParentRight="true"/>
</RelativeLayout>

3) Dans la méthode getGroupView () de votre classe ExpandableListAdapter.Java, définissez simplement les éléments suivants:

ivGroupIndicator.setSelected(isExpanded);

Avec cette approche, votre down_icon et up_icon fonctionnera correctement. J'espère que cela t'aides.

13
user1182217

une autre solution pour mettre l'indicateur à droite par programme:

expandableListView = (ExpandableListView) findViewById(R.id.expandableListView);

        Display display = getWindowManager().getDefaultDisplay();
        Point size = new Point();
        display.getSize(size);
        int width = size.x;
        Resources r = getResources();
        int px = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
                50, r.getDisplayMetrics());
        if (Android.os.Build.VERSION.SDK_INT < Android.os.Build.VERSION_CODES.JELLY_BEAN_MR2) {
            expandableListView.setIndicatorBounds(width - px, width);
        } else {
            expandableListView.setIndicatorBoundsRelative(width - px, width);
        }

expandableListView est votre ExpandableListview

3
Badr At