检测所有小部件的Android实例?
Posted
技术标签:
【中文标题】检测所有小部件的Android实例?【英文标题】:Android instanceof detecting all widgets? 【发布时间】:2011-08-02 11:38:03 【问题描述】:我正在尝试通过遍历LinearLayout
的视图并使用instanceof
来设置所有TextView
的字体。
该表单目前由 4 个TextView
和一个Button
组成。
以下代码正在检测所有View
s,甚至将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
?如果是这样,这样做的正确方法是什么?
任何帮助表示赞赏,谢谢。瑞奇。
【问题讨论】:
【参考方案1】:其实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 的任何其他子类(如果您使用它们)。
【讨论】:
【参考方案2】:很简单
Button Class 扩展 TextView Class
查看documentaion
【讨论】:
以上是关于检测所有小部件的Android实例?的主要内容,如果未能解决你的问题,请参考以下文章
多个 Android Widget 实例仅更新最后一个小部件