Android instanceof检测所有小部件?

Ric*_*cky 3 java android views instanceof

我试图TextView通过迭代LinearLayout视图和使用来设置所有的字体instanceof.

表格目前由4个TextView和1个组成Button.

下面的代码是检测所有Views,甚至Button是一个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 instanceof TextView) {
            ((TextView) v).setTypeface(Fonts.get3dDumbFont(this));
        }
    }
Run Code Online (Sandbox Code Playgroud)

如果我记录每个视图的类名,它将返回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));
        }
    }
Run Code Online (Sandbox Code Playgroud)

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

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

Ped*_*iro 8

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

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

public class Button extends TextView
Run Code Online (Sandbox Code Playgroud)

如果instanceof要排除按钮或使用,您可以制作第二个

if (v.getClass() == TextView.class)
Run Code Online (Sandbox Code Playgroud)

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