检测所有小部件的Android实例?

Posted

技术标签:

【中文标题】检测所有小部件的Android实例?【英文标题】:Android instanceof detecting all widgets? 【发布时间】:2011-08-02 11:38:03 【问题描述】:

我正在尝试通过遍历LinearLayout 的视图并使用instanceof 来设置所有TextView 的字体。

该表单目前由 4 个TextView 和一个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));
        
    

如果我记录每个视图的类名,它会返回 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 应用小部件实例发送相同的待处理意图

多个 Android Widget 实例仅更新最后一个小部件

重启或升级应用程序后,我的 Android 小部件停止更新

Android 小部件宽度 - 在所有设备上匹配父级

Android 桌面小部件(AppWidgetProvider)的应用

Android 小部件通过意图将数据发送到 onRecive