2011-09-20 10 views
9

Oto mój kod:Pętla przez wszystkie dzieci 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); 
    } 

Tu jest mój XML dla tej strony:

<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> 

problam jest to, że ja się tylko, że na konsoli logcat:

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

Dlaczego nie otrzymuję odnośników do TextViews?

Odpowiedz

22

Musisz przechodzić przez drzewo rekurencyjnie. Obecnie wyświetlana jest tylko lista dzieci widoku root.

Innymi słowy, trzeba coś takiego:

@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); 
      } 
     }     
    } 
}