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?如果是这样,这样做的正确方法是什么?
任何帮助表示感谢,谢谢.瑞奇.
实际上,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的任何其他子类都不匹配(如果你使用它们).