【问题标题】:How to get all Views in an Activity?如何获取活动中的所有视图?
【发布时间】:2010-07-10 22:52:18
【问题描述】:

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

比如

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

【问题讨论】:

    标签: android view android-activity


    【解决方案1】:

    有没有办法让每个视图 在我的活动中吗?

    获取您的根View,将其转换为ViewGroup,调用getChildCount()getChildAt(),并根据需要进行递归。

    我有超过 200 次观看,包括 按钮和图像,所以我想成为 可以通过循环访问它们

    那是相当多的Views

    【讨论】:

    • 非常感谢,完美的一个不可见的物体(按钮)挡住了我的整个屏幕,我用它来找出被挡住的项目并找到它:)
    • SDK 自带的hierarchyviewer 工具可以帮助您发现此类问题。它可以以树的形式直观地显示应用的视图层次结构,让您可以检查每个视图的属性。
    • 我知道但是大部分对象都是通过代码添加到屏幕上的。
    【解决方案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());
    

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

    【讨论】:

      【解决方案3】:

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

      给出以下命令。

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

      遍历循环。

      我们会得到结果。

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          在 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)
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-09-29
            • 1970-01-01
            • 2019-10-26
            • 2012-01-06
            • 1970-01-01
            • 2023-02-05
            相关资源
            最近更新 更多