Android 获取屏幕上所有UI元素的列表

Android 获取屏幕上所有UI元素的列表,android,Android,是否可以获取当前显示/屏幕上所有android UI元素的列表 例如,如果我有这样一个应用程序: 我将得到一份包含以下内容的列表: TextView(你好,世界!) RelativeLayout(或任何父容器) 等等,如果有更多的元素 如果我不知道ID,甚至不知道屏幕上会出现什么UI元素,但我仍然想隐藏/显示它们,那就太好了。您可以使用下面的管理器来实现这一点,既漂亮又干净! 您可以在任何地方使用它,您将获得视图及其所有子视图的列表 (需要递归完成) getView(getWindow(

是否可以获取当前显示/屏幕上所有android UI元素的列表

例如,如果我有这样一个应用程序:

我将得到一份包含以下内容的列表:

  • TextView(你好,世界!)
  • RelativeLayout(或任何父容器)
  • 等等,如果有更多的元素
如果我不知道ID,甚至不知道屏幕上会出现什么UI元素,但我仍然想隐藏/显示它们,那就太好了。

您可以使用下面的管理器来实现这一点,既漂亮又干净! 您可以在任何地方使用它,您将获得视图及其所有子视图的列表

(需要递归完成)


getView(getWindow())


公共类布局管理器
{
私有静态列表视图;
公共静态列表GetView(窗口){
返回GetView(window.getDecorView().getRootView(),true);
}
公共静态列表GetView(最终视图视图,布尔启动)
{
如果(启动){
视图=新的ArrayList();
}
视图。添加(视图);
/**在每个视图组中也搜索子视图*/
if(视图组的视图实例){
ViewGroup ViewGroup=(ViewGroup)视图;
对于(int i=0;i
您可以通过使用下面的管理器来实现这一点,既漂亮又干净! 您可以在任何地方使用它,您将获得视图及其所有子视图的列表

(需要递归完成)


getView(getWindow())


公共类布局管理器
{
私有静态列表视图;
公共静态列表GetView(窗口){
返回GetView(window.getDecorView().getRootView(),true);
}
公共静态列表GetView(最终视图视图,布尔启动)
{
如果(启动){
视图=新的ArrayList();
}
视图。添加(视图);
/**在每个视图组中也搜索子视图*/
if(视图组的视图实例){
ViewGroup ViewGroup=(ViewGroup)视图;
对于(int i=0;i
public class LayoutManager
{
    private static List<View> views;

    public static List<View> getViews(Window window) {
        return getViews(window.getDecorView().getRootView(), true);
    }

    public static List<View> getViews(final View view, boolean starting)
    {
        if (starting) {
            views = new ArrayList<>();
        }

        views.add(view);

        /** Search in each ViewGroup children as well */
        if (view instanceof ViewGroup) {
            ViewGroup viewGroup = (ViewGroup) view;
            for (int i = 0; i < viewGroup.getChildCount(); i++) {
                getViews(viewGroup.getChildAt(i), false);
            }
        }

        return views;
    }
}