我正在尝试通过迭代TextView
的视图并使用LinearLayout
在所有instanceof
中设置字体。
表单目前包含4个TextView
和一个Button
。
以下代码检测到所有View
,甚至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));
}
}
如果我记录每个视图的类名,它会返回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
吗?如果是这样,那么这样做的正确方法是什么?
任何帮助表示感谢,谢谢。瑞奇。
答案 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)