2015-03-23 4 views
0

J'ai une interface utilisateur comme ceci:comment obtenir tous vue enfant direct et hirechery dans Android

<RelativeLayout> 
     <TextView /> 
     <RelativeLayout> 
      <TextView /> 
      <TextView /> 
      <LinearLayout> 
        <TextView /> 
      </LinearLayout> 
     </RelativeLayout> 
</RelativeLayout> 

Je veux accéder à tous TextViews programme et changer certains attributs, mais Je ne veux pas utiliser id et findViewById , parce que j'ai une mise en page multi que je veux effectuer les mêmes changements en eux, à savoir: changer les polices de TextViews.

Comment puis-je accéder à tous les TextViews, qu'ils soient directs ou hiérarchiques, comme RelativeLayout dans une boucle ou dans une liste?

+1

Il serait trivial d'écrire un algorithme récursif (ou même linéaire) pour passer au-dessus de la hiérarchie des vues. La plupart de la solution est déjà décrite [ici] (http://stackoverflow.com/questions/18668897/android-get-all-children-elements-of-a-viewgroup/). Tout ce que vous devez faire est d'ajouter une vérification de type pour le type d'affichage particulier qui vous intéresse. –

Répondre

0
LinearLayout mLinearLayout = (LinearLayout) findViewById(R.id.my_linear_layout); 

    for(i = 0; i <= mLinearLayout.getChildCount(); i++){ 
     View view = mLinearLayout.getChildAt(i); 
     if (view instanceof TextView){ 
      TextView textView = (TextView) view; 
      // TODO do your stuff 
     } 
    } 

si vous avez dans votre ViewGroups RelativeLayout alors vous devez écrire une méthode récursive.

+0

* "Si vous avez ViewGroups dans votre RelativeLayout (...)" * - basé sur la question, il n'y a pas beaucoup de un * if * ici ... Il y a un 'RelativeLayout' dans le premier niveau, et un' LinearLayout' dans le second. –

+0

Il devrait en chercher pour s'améliorer: P –