2011-08-02 2 views
3

J'essaie de définir une police sur tous les TextView en parcourant les vues de LinearLayout et en utilisant instanceof. Le formulaire est actuellement composé de 4 TextView et un Button.Instance Android de détection de tous les widgets?

Le code ci-dessous détecte tous les View s, même le Button en tant que TextView? Si je consignation le nom de classe de chaque vue, elle renvoie le TextView et le bouton afin que je sache que les commandes correctes sont prises en compte.

Le problème est que les polices Button et TextView sont en cours de définition, et je ne veux que les TextView.

J'ai trouvé un travail autour et c'est de faire ce qui suit, mais je suis intrigué pour savoir pourquoi le code ci-dessus ne fonctionne pas comme prévu.

/* Set fonts */ 
    LinearLayout ll = (LinearLayout) findViewById(R.id.ll_screenincourse_wrapper); 
    for (int i = 0; i < ll.getChildCount(); i++) {   
     View v = ll.getChildAt(i);   
     if (v.getClass().getName().contains("TextView")) { 
      ((TextView) v).setTypeface(Fonts.get3dDumbFont(this)); 
     } 
    } 

Est-ce parce que les deux boutons et TextView sont de type View? Si oui, quelle serait la bonne façon de le faire?

Toute aide appréciée, merci. Ricky.

Répondre

7

En fait, Button est une sous-classe de TextView! C'est pourquoi vous le voyez comme un TextView (c'est aussi un TextView).

http://developer.android.com/reference/android/widget/Button.html

public class Button extends TextView 

Vous pouvez faire une seconde si instanceof qu'exclure boutons ou utilisez

if (v.getClass() == TextView.class) 

Mais cela ne correspond à aucun autre sous-classes de TextView (si vous les utilisez).

+0

Eek, bien sûr. Que je suis bête. Merci. – Ricky

Questions connexes