遍历布局中的视图并更改字体类型。

7

我想知道是否有一种方法可以遍历布局中的所有视图,并更改具有文本的所有视图(即TextView,CheckBox,EditText等)的字体。 我有一个称为setContentView()的布局,并且想知道是否有一种简单的方法来实现这一点。

我可以使用findViewById()手动执行此操作,但我宁愿有一种简单的方法来遍历它们所有。

谢谢, -克拉克-

1个回答

18

或许这能帮你入门:

protected void changeFonts(ViewGroup root) {

        Typeface tf = Typeface.createFromAsset(getAssets(), "fonts/comicsans.ttf");

        for(int i = 0; i <root.getChildCount(); i++) {
                View v = root.getChildAt(i);
                if(v instanceof TextView ) {
                        ((TextView)v).setTypeface(tf);
                } else if(v instanceof Button) {
                        ((Button)v).setTypeface(tf);
                } else if(v instanceof EditText) {
                        ((EditText)v).setTypeface(tf);
                } else if(v instanceof ViewGroup) {
                        changeFonts((ViewGroup)v);
                }
        }

    }

做到了,谢谢!我有一个嵌套布局的布局,我只需对它们递归调用changeFonts(),就可以很好地解决问题。 - clark
非常好的解决方案!这篇文章还解决了类似的问题,并解释了递归方法:SO - Iterate through ViewGroup - HelloImKevo
聪明的代码应该立即递增,最后一个else if语句使递归搜索+1。 - Stoycho Andreev
Button和EditText是TextView的子类,因此我认为您永远不会转换为Button或EditText。 - Larry McKenzie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接