IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Utilisation dynamique de ColorStateList


Sujet :

Android

  1. #1
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    249
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Avril 2004
    Messages : 249
    Points : 112
    Points
    112
    Par défaut Utilisation dynamique de ColorStateList
    bonjour,

    pour modifier la couleur de mon texte dans les items d'une listview, j'utilise une ColorStateList :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android" >
      <item android:state_pressed="true" android:color="@color/bleu" />
      <item android:state_focused="true" android:color="@color/rouge" />
      <item android:state_selected="true" android:color="@color/vert" />
      <item android:color="@color/jaune"/>
    </selector>
    quand j'associe cette colorstatelist à la propriété android:textcolor de chaque textview de mon item directement dans le layout de l'item, tout fonctionne parfaitement.

    au final, j'ai besoin d'associer dynamiquement cette colorstatelist ou une autre aux textview (en fonction d'un critère spécifique).
    j'ai donc retiré la référence dans le layout et je fais l'association à partir de la fonction getview de mon adapter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if (support_pret_actif)
    {
       holder.tvhFilm_titre.setTextColor(R.color.mycolorlist1);
       holder.tvhFilm_categorie.setTextColor(R.color.mycolorlist1);
    }
    else
    {
       holder.tvhFilm_titre.setTextColor(R.color.mycolorlist2);
       holder.tvhFilm_categorie.setTextColor(R.color.mycolorlist2);
    }
    là, rien ne fonctionne et les couleurs de texte sont celles par défaut.

    j'ai oublié quelque chose ?
    _____
    __
    _

    Engi

  2. #2
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    249
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Avril 2004
    Messages : 249
    Points : 112
    Points
    112
    Par défaut
    j'ai trouvé une solution :

    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    holder.tvhFilm_titre.setTextColor(R.color.mycolorlist1);
    holder.tvhFilm_categorie.setTextColor(R.color.mycolorlist1);
    je mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    try
    {
       XmlResourceParser parser = mcontext.getResources().getXml(R.color.text_color_prete);
       ColorStateList colors = ColorStateList.createFromXml(mcontext.getResources(), parser);
       holder.tvhFilm_titre.setTextColor(colors);
       holder.tvhFilm_categorie.setTextColor(colors);
    }
    catch (Exception e)
    {
       // handle exceptions
    }
    Ca fonctionne mais est-ce adapté et optimisé ?
    Pourquoi la première version (plus simple) ne fonctionne-t-elle pas ?
    _____
    __
    _

    Engi

  3. #3
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    Bonjour,

    Si tu utilise un selector c'est pour l'appliquer automatiquement à ton objet.

    Et non le faire à la main comme tu nous le présente.

    Maintenant si ton but est d'avoir des couleurs prédéfini dans tes ressources, créer un fichier color.xml dans tes ressources

    res/color/
    Ensuite déclares les le plus simplement possible :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <color
            name="color_name"
            >hex_color</color>
    </resources>
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

  4. #4
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    249
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Avril 2004
    Messages : 249
    Points : 112
    Points
    112
    Par défaut
    Oui, au début, c'est ce que je faisais.
    Le problème, c'est la possibilité de tomber sur un item dont la couleur de fond (en fonction de son état pressed, focused, etc) est plus ou moins proche de la couleur du texte.
    Si j'utilise une ressource couleur en l'attribuant par code, ça fonctionne très bien mais alors, dans ce cas là, l'état de l'item (pressed, focused, etc...) n'est pas connu.
    Il me semblait que c'était justement l'intérêt de passer par la notion de ColorStateList.
    _____
    __
    _

    Engi

  5. #5
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    Il me semblait que c'était justement l'intérêt de passer par la notion de ColorStateList.
    Oui c'est l'intérêt sauf que comme je l'ait précédemment cela se fera de manière automatique car tu auras lié ton selector à un style que tu auras attribué à ta 'View' depuis ton layout.

    Ok je croyais que tu avais fait les deux en même temps .

    Donc si tu veux utiliser les selector :
    Un exemple avec des drawables au lieu des colors :
    http://cyril-mottier.developpez.com/...personnalises/

    Donc cela te donnerait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_window_focused="false" android:state_enabled="true" android:drawable="@color/yellow" />
        <item android:state_pressed="true" android:drawable="@color/green" />
        <item android:state_focused="true" android:drawable="@color/blue" />
        <item android:state_enabled="true" android:drawable="@color/red" />
    </selector>
     
    <Button 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="New dummy content"
            android:background="@drawable/mybutton" />
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

Discussions similaires

  1. Utilisation dynamique des composants
    Par Gaadek dans le forum Delphi
    Réponses: 2
    Dernier message: 10/01/2007, 11h09
  2. Utilisation dynamique de String dans un <select>
    Par NikoBe dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 24/10/2006, 16h25
  3. utilisation dynamique des DLL
    Par ielbenna dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 25/09/2006, 11h48
  4. [VBA-E] Utilisation dynamique de variables
    Par zlavock dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 10/06/2006, 17h35
  5. [JSP] utilisation dynamique des includes
    Par shinchun dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 24/05/2004, 15h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo