2011-09-20 10 views
9

Aquí está mi código:Pasar por todos los elementos secundarios de GroupView?

Typeface font = Typeface.createFromAsset(getAssets(), "fonts/choco.ttf"); 
    ViewGroup rootView = (ViewGroup) findViewById(android.R.id.content).getRootView(); 
    for(int i = 0; i < rootView.getChildCount(); i++) 
    { 
     View child = rootView.getChildAt(i); 
     Log.d("menfis", child.toString()); 
     if(child != null) 
      if(child.getClass() == TextView.class) 
       ((TextView) child).setTypeface(font); 
    } 

Aquí es mi XML público:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:background="@drawable/background_page" 
android:gravity="center_horizontal" > 

<ImageView 
    android:id="@+id/imgApplicationIcon"   
    android:src="@drawable/logo" 
    android:layout_width="fill_parent" android:layout_height="wrap_content"/> 

<TextView 
    android:layout_marginTop="40dip" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="right" 
    android:textColor="@color/red" 
    android:lines="2" 
    android:layout_marginRight="30dip" 
    android:text="test1" /> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="right" 
    android:layout_marginRight="30dip" 
    android:textColor="@color/red" 
    android:lines="2" 
    android:text="test2" /> 
</LinearLayout> 

El problam es que solo me dan que en la consola LogCat:

09-20 14:34:27.264: DEBUG/menfis(12251): [email protected] 

Por qué No estoy obteniendo referencias a los TextViews?

Respuesta

22

Es necesario recorrer el árbol de vista de forma recursiva. Actualmente, solo se enumeran los hijos de la vista raíz.

En otras palabras, se necesita algo como esto:

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    ... 
    Typeface font = Typeface.createFromAsset(getAssets(), "fonts/choco.ttf"); 
    ViewGroup rootView = (ViewGroup) findViewById(android.R.id.content).getRootView(); 
    applyFontRecursively(rootView, font); 
} 

void applyFontRecursively(ViewGroup parent, Typeface font) 
{  
    for(int i = 0; i < parent.getChildCount(); i++) 
    { 
     View child = parent.getChildAt(i);    
     if(child instanceof ViewGroup) 
     { 
      applyFontRecursively((ViewGroup)child, font); 
     } 
     else if(child != null) 
     { 
      Log.d("menfis", child.toString()); 
      if(child.getClass() == TextView.class) 
      { 
       ((TextView) child).setTypeface(font); 
      } 
     }     
    } 
} 
Cuestiones relacionadas