通过GroupView所有孩子的循环?孩子、GroupView

2023-09-13 23:56:03 作者:郁痛の哀伤

下面是我的code:

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

下面是我的XML网页:

Here is my XML for this page:

<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的是,我只得到了LogCat中控制台上:

The problam is that i only get that on the LogCat console:

09-20 14:34:27.264: DEBUG/menfis(12251): android.widget.LinearLayout@40523820

为什么我没有收到提到了TextViews?

Why i'm not getting references to the TextViews ?

推荐答案

您需要递归遍历视图树。目前,您只列出根视图的孩子。

You need to traverse View tree recursively. Currently you only list children of root view.

换句话说,你需要的是这样的:

In other words, you need something like this:

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