Android instanceof检测所有小部件?

时间:2011-08-02 11:38:04

标签: java android views instanceof

我正在尝试通过迭代TextView的视图并使用LinearLayout在所有instanceof中设置字体。

表单目前包含4个TextView和一个Button

以下代码检测到所有View,甚至ButtonTextView

    /* Set fonts */
    LinearLayout ll = (LinearLayout) findViewById(R.id.ll_screenincourse_wrapper);
    for (int i = 0; i < ll.getChildCount(); i++) {          
        View v = ll.getChildAt(i);          
        if (v instanceof TextView) {
            ((TextView) v).setTypeface(Fonts.get3dDumbFont(this));
        }
    }

如果我记录每个视图的类名,它会返回TextView和Button,所以我知道正在拾取正确的控件。

问题是正在设置Button和TextView的字体,我只想要TextView

我找到了一个解决方法,即做以下操作,但我对上述代码无法正常工作的原因感到好奇。

    /* Set fonts */
    LinearLayout ll = (LinearLayout) findViewById(R.id.ll_screenincourse_wrapper);
    for (int i = 0; i < ll.getChildCount(); i++) {          
        View v = ll.getChildAt(i);          
        if (v.getClass().getName().contains("TextView")) {
            ((TextView) v).setTypeface(Fonts.get3dDumbFont(this));
        }
    }

是因为Button和TextView的类型都是View吗?如果是这样,那么这样做的正确方法是什么?

任何帮助表示感谢,谢谢。瑞奇。

2 个答案:

答案 0 :(得分:8)

实际上,Button是TextView的子类!这就是为什么你把它看作TextView(它也是一个TextView)。

http://developer.android.com/reference/android/widget/Button.html

public class Button extends TextView

如果instanceof排除按钮或使用

,您可以制作第二个
if (v.getClass() == TextView.class)

但是这与TextView的任何其他子类都不匹配(如果你使用它们)。

答案 1 :(得分:2)