2009-10-17 10 views
6

J'ai un TextView à l'intérieur d'un LinearLayout. Le LinearLayout est en mesure de recevoir le focus, et je veux que le textColor du TextView change quand il le fait. Je pensais que l'utilisation d'un ColorStateList fonctionnerait, mais il semblerait que le TextView ne reçoive pas de focus lorsque le LinearLayout le fait. Je sais que, parce que je l'ai essayé ce code:Android: changer TextView textColor lorsque le parent est concentré

mTextView.setOnFocusChangeListener(new OnFocusChangeListener() { 

    @Override 
    public void onFocusChange(View v, boolean hasFocus) { 
     Log.d(TAG, "Changed TextView focus to: " + hasFocus); 
    } 
}); 

Et rien ne se connecté. Je ne veux pas utiliser un OnFocusChangeListener sur le LinearLayout pour changer le textColor du TextView, je pense que cela doit être fait à partir de XML. La raison en est que dans une autre activité j'ai un ExpandableListView avec un adaptateur personnalisé et des vues personnalisées et Android change les textColor s du TextView s (du clair au foncé) dans mes vues personnalisées lorsque les éléments sont mis au point.

Répondre

10

C'est un ancien poste, mais depuis que j'avais la même problème, voici l'attribut XML que je trouve à faire:

android:duplicateParentState="true" 

(à ajouter à la TextView pour changer son état « concentré » lorsque les changements d'état de la mise en page)

+0

Fonctionnement bien bro :: :) –

4

Vous pouvez récupérer votre TextView dans la méthode onFocuseChange de l'écouteur de LinearLayout. Quelque chose comme

public void onFocusChange(View v, boolean hasFocus) { 
    TextView tv = (TextView)v.findViewById(R.id.myTextView); 
    tv.setTextColor(R.color.foo); 
} 

Depuis votre LL peut héberger plusieurs widgets Je pense qu'il est prévu que onFocus du LL ne se propage pas, même si vous avez un seul contrôle

+0

Je sais que je peux faites comme ça, mais comme je l'ai dit dans le message original, je voudrais l'éviter. En outre, si vous avez déjà utilisé un adaptateur personnalisé pour un ListView, vous constaterez qu'il modifie toujours la couleur du texte lors de la mise au point d'un élément de liste, quel que soit le nombre d'éléments présents dans une vue d'élément. Je suis curieux de savoir comment ils ont fait cela, et je parie que c'est fait à partir de XML seulement. – Felix

Questions connexes