2009-12-14 9 views
2

J'utilise ExpandableListView dans mon application et l'une des plaintes que je reçois des utilisateurs est que lorsque le List élément est étendu, il est difficile de distinguer visuellement où l'enfant se termine point et L'article suivant du groupe commence.Android - ExpandableListView fond de changement pour les articles de l'enfant

Donc je voudrais changer l'arrière-plan de l'article List enfant à la nuance différente.

Les tentatives brutales que j'ai faites jusqu'ici étaient basées sur la modification directe de la couleur de fond et du texte des éléments à l'intérieur de l'élément enfant View, mais cela entraîne une perte de survols et de hautes lumières. Donc ma question est - quelle est une bonne stratégie pour atteindre ce qui précède?

J'ai essayé styles et selectors mais ce qui me clochards est si je change de fond pour l'article de l'enfant alors je dois ajouter selectors pour toutes les combinaisons de mise au point/permis, etc. Quand tout ce que je suis en train de le faire pour remplacer un seul chose.

Est-il possible d'hériter parent style et un ensemble background que pour les non-ciblés, élément activé de l'enfant avec d'autres styles retenus?

Répondre

3

Bien. Voici ce qui a fonctionné pour moi:

  1. Créer list_background.xml dans votre répertoire de projet res/drawable
  2. Définir la valeur d'arrière-plan de la mise en page de haut niveau de votre élément enfant à l'drawable ci-dessus. Si vous gratter la tête à ce moment - je fais référence au fichier de mise en page XML qui s'est utilisé lorsque vous créez vue enfant de votre liste extensible dans ExpandableListAdapter#getChildView

Voici fichier drawable complet

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" android:state_enabled="true" 
     android:drawable="@drawable/list_highlight_active" /> 
    <item android:state_enabled="true" android:state_selected="true" 
     android:state_window_focused="true" 
    android:drawable="@drawable/list_highlight_inactive" /> 
    <item android:state_enabled="true" android:state_window_focused="true" 
     android:drawable="@color/item_body" /> 
    <item android:drawable="@color/item_body" /> 
</selector> 

J'ai dû copier list_highlight_active.xml et list_highlight_inactive.xml de /android-sdk-windows-1.6_r1/platforms/android-1.5/data/res/drawable au répertoire drawable de mon projet. @color/item_body est juste une nuance de gris

0

Je viens de découvrir un moyen de "quelque peu" définir la couleur de fond sans avoir à sauter à travers les cerceaux du sélecteur.

Comme vous l'avez noté, le réglage de l'arrière-plan sur une couleur unie efface les hautes lumières du sélecteur car la nouvelle couleur de fond l'obscurcit. Droidin a ce qui est la solution normale: fournir votre propre sélecteur d'arrière-plan avec les couleurs exactes que vous voulez. C'est une douleur pour le moins.

Mais si tout ce que vous voulez est un peu de différenciation des couleurs, il existe un moyen plus simple: le mélange alpha. Définissez votre couleur d'arrière-plan avec une valeur alpha. Par exemple, définissez l'arrière-plan sur "#BBFFFFFF". Les deux premiers chiffres indiquent le niveau alpha. Tout va se mélanger pour que l'arrière-plan ne soit pas d'un blanc pur et le surlignage de sélection ne sera pas l'orange vif normal mais les enfants auront une couleur différente et la surbrillance fonctionne toujours. Gagnant-gagnant.

0

Je recherche une solution similaire. Vous pouvez essayer d'obtenir parent Voir sur la méthode de l'adaptateur getChieldView. Je pense que ce parent est une vue des parents de tous vos mécanismes. Et définir l'arrière-plan de la ressource à ce parent. Je le fais comme ceci:

@Override 
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { 
    if (convertView == null) { 
     LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = inflater.inflate(R.layout.fa_report_sub_item, null); 
     View parentGroup=(View) convertView.getParent(); 
     parentGroup.setBackgroundResource(R.drawable.fa_summ_report_main_item); 
    }