如何获取活动中的所有视图?

时间:2010-07-10 22:52:18

标签: android view android-activity

有没有办法让每个视图都在我的活动中? 我有超过200个视图,包括按钮和图像,所以我希望能够通过使用循环

来访问它们

例如

之类的东西
for (View v : this)
{
     //do something with the views 
     //depending on the types (button, image , etc)
}

5 个答案:

答案 0 :(得分:24)

  

有没有办法让每一个观点都有   在我的活动里面?

获取根View,将其转换为ViewGroup,致电getChildCount()getChildAt(),然后根据需要进行递归。

  

我有200多个观点,包括   按钮和图像,所以我想成为   能够通过循环访问它们

这是一个相当大的Views

答案 1 :(得分:4)

具体来说:

private void show_children(View v) {
    ViewGroup viewgroup=(ViewGroup)v;
    for (int i=0;i<viewgroup.getChildCount();i++) {
        View v1=viewgroup.getChildAt(i);
        if (v1 instanceof ViewGroup) show_children(v1);
        Log.d("APPNAME",v1.toString());
    }
}

然后在某处使用该功能:

show_children(getWindow().getDecorView());

显示当前活动中的所有视图。

答案 2 :(得分:1)

尝试查找与活动相关联的所有视图。

给出以下命令。

ViewGroup viewgroup=(ViewGroup)view.getParent();
viewgroup.getchildcount();

遍历循环。

我们将得到结果。

答案 3 :(得分:0)

您可以使用hierarchyviewer,它允许您查看视图层次结构,包括在代码中创建的视图层次结构。它的主要原因是调试这样的事情。最新的Android Studio现在在设备监视器中具有此功能,允许您转储UI以进行调试。

答案 4 :(得分:0)

在Kotlin中递归执行此操作的好方法:

private fun View.getAllViews(): List<View> {
    if (this !is ViewGroup || childCount == 0) return listOf(this)

    return children
            .toList()
            .flatMap { it.getAllViews() }
            .plus(this as View)
}