Android - ExpandableListView Change Contexte pour les éléments enfants
-
19-09-2019 - |
Question
j'utilise ExpandableListView
Dans mon application et l'une des plaintes que j'obtiens des utilisateurs est que lorsque le List
L'article est étendu, il est difficile de distinguer visuellement où la fin de l'élément de l'enfant se termine et le prochain élément de groupe commence.
Alors je voudrais changer l'arrière-plan de l'enfant List
Article à la teinte différente.
Les tentatives brutales que j'ai faites jusqu'à présent étaient basées sur la couleur d'arrière-plan et le texte des éléments à l'intérieur de l'enfant View
Article, mais cela entraîne une perte de plantes et de faits saillants. Ma question est donc - quelle est une bonne stratégie pour réaliser ce qui précède?
j'ai essayé styles
et selectors
Mais ce qui me dit vraiment, c'est si je change d'information pour l'article enfant, alors j'ai besoin d'ajouter selectors
Pour toutes les combinaisons de focus / activées, etc. Quand je pense que j'essaie de le faire pour écraser une seule chose.
Existe-t-il un moyen d'hériter des parents style
Et mettre background
uniquement pour un élément d'enfant non focalisé avec d'autres styles
retenu?
La solution
Bien. Voici ce qui a fonctionné pour moi:
- Créez list_background.xml dans votre projet
res/drawable
annuaire - Définissez la valeur d'arrière-plan de la disposition du niveau supérieur de votre élément d'enfant au dessin ci-dessus. Si vous vous grattez la tête à ce stade - je fais référence au fichier de mise en page XML qui est utilisé lorsque vous créez une vue d'enfant de votre liste extensible dans
ExpandableListAdapter#getChildView
Voici un fichier tirable 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>
Je devais 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 dessinable de mon projet. @color/item_body
est juste une nuance de gris
Autres conseils
Je viens de découvrir un moyen de «quelque peu» régler la couleur d'arrière-plan sans avoir à sauter à travers les cerceaux de sélecteur.
Comme vous l'avez noté, la définition de l'arrière-plan sur une couleur unie essuie les reflets du sélecteur car la nouvelle couleur d'arrière-plan l'obscurcit. Droidin a quelle est la solution normale: fournissez à votre propre sélecteur de fond les couleurs exactes que vous souhaitez. C'est une douleur pour le moins.
Mais si tout ce que vous voulez est une petite différenciation des couleurs, il existe un moyen plus simple: alpha mélange. 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 se mélangera, donc l'arrière-plan ne sera pas un blanc pur et le point fort de la sélection ne sera pas l'orange vif normal, mais les enfants seront d'une couleur différente et le point culminant fonctionne toujours. Gagnant-gagnant.
Je recherche une solution similaire. Vous pouvez essayer d'obtenir une vue parent sur l'adaptateur Méthode GetChieldView. Je pense que ce parent est une vision parentale de tous vos chields. Et définir l'arrière-plan de la ressource à ce parent. Je le fais comme ça:
@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);
}