2010-07-10 57 views
9

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

例如像

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

回答

22

访问它们有没有办法让每个视图 在我的活动内?

让您的根View,将其转换为一个ViewGroup,叫getChildCount()getChildAt(),以及递归需要。

我有超过200个视图,包括 按钮和图像,所以我想成为 能够通过使用循环

这是一个相当大的数量Views访问它们。

+0

非常感谢,完美 一个看不见的物体(按钮)挡住了我的整个屏幕,我用这个找出什么物品被阻挡并找到它:) – aryaxt 2010-07-11 00:12:42

+6

SDK自带的'hierarchyviewer'工具可以帮助你发现这样的问题。它可以以树的形式直观地显示应用程序的视图层次结构,使您可以检查每个视图的属性。 – adamp 2010-07-11 02:26:26

+1

我知道,但大多数对象都是通过代码添加到屏幕上的。 – aryaxt 2010-07-14 17:22:57

1

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

给出以下命令。

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

遍历循环。

我们会得到结果。

0

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

2

具体来说:

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()); 

显示当前活动的所有意见。