xml同级节点如何一次性取出来

最近做安卓控件的获取,我参照github上的源码以自己的一些构思,做了一个安卓控件获取的插件。
实现思路是先拿下快照,然后在图片上点击,就能根据坐标点和对布局xml文件解析,拿到控件。下图是安卓模拟器的快照和控件框选:
xml同级节点如何一次性取出来
我现在想做一个功能,将所有跟日历同级的控件全部框选出来。我之前的思路是深度优先遍历xml节点,拿到bounds最小并且包含坐标点的控件。
现在想把其它控件一并框出来,即找到所有同级节点的bounds。
xml文件内容如下:

<?xml version='1.0' encoding='UTF-8' standalone='yes' ?><hierarchy rotation="1"><node index="0" text="" resource-id="" class="android.widget.FrameLayout" package="com.google.android.apps.nexuslauncher" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[0,0][1920,1104]"><node index="0" text="" resource-id="" class="android.widget.LinearLayout" package="com.google.android.apps.nexuslauncher" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[0,0][1920,1104]"><node index="0" text="" resource-id="android:id/content" class="android.widget.FrameLayout" package="com.google.android.apps.nexuslauncher" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[0,0][1920,1104]"><node index="0" text="" resource-id="com.google.android.apps.nexuslauncher:id/launcher" class="android.widget.FrameLayout" package="com.google.android.apps.nexuslauncher" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[0,0][1920,1104]"><node index="0" text="" resource-id="com.google.android.apps.nexuslauncher:id/drag_layer" class="android.widget.FrameLayout" package="com.google.android.apps.nexuslauncher" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[0,0][1920,1104]"><node index="0" text="" resource-id="com.google.android.apps.nexuslauncher:id/scrim_view" class="android.view.View" package="com.google.android.apps.nexuslauncher" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[0,0][1920,1104]"><node index="0" text="" resource-id="" class="android.view.View" package="com.google.android.apps.nexuslauncher" content-desc="Apps list" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[48,1040][96,1088]" /></node><node index="2" text="" resource-id="com.google.android.apps.nexuslauncher:id/apps_view" class="android.widget.RelativeLayout" package="com.google.android.apps.nexuslauncher" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[0,0][1920,1104]"><node index="0" text="" resource-id="com.google.android.apps.nexuslauncher:id/apps_list_view" class="androidx.recyclerview.widget.RecyclerView" package="com.google.android.apps.nexuslauncher" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[48,120][1736,1104]"><node index="0" text="Appium Settings" resource-id="com.google.android.apps.nexuslauncher:id/icon" class="android.widget.TextView" package="com.google.android.apps.nexuslauncher" content-desc="Appium Settings" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="true" password="false" selected="false" bounds="[48,192][386,368]" /><node index="1" text="Calendar" resource-id="com.google.android.apps.nexuslauncher:id/icon" class="android.widget.TextView" package="com.google.android.apps.nexuslauncher" content-desc="Calendar" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="true" password="false" selected="false" bounds="[386,192][723,368]" /><node index="2" text="Camera" resource-id="com.google.android.apps.nexuslauncher:id/icon" class="android.widget.TextView" package="com.google.android.apps.nexuslauncher" content-desc="Camera" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="true" password="false" selected="false" bounds="[723,192][1061,368]" /><node index="3" text="Chrome" resource-id="com.google.android.apps.nexuslauncher:id/icon" class="android.widget.TextView" package="com.google.android.apps.nexuslauncher" content-desc="Chrome" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="true" password="false" selected="false" bounds="[1061,192][1398,368]" /><node index="4" text="Clock" resource-id="com.google.android.apps.nexuslauncher:id/icon" class="android.widget.TextView" package="com.google.android.apps.nexuslauncher" content-desc="Clock" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="true" password="false" selected="false" bounds="[1398,192][1736,368]" /><node index="5" text="Contacts" resource-id="com.google.android.apps.nexuslauncher:id/icon" class="android.widget.TextView" package="com.google.android.apps.nexuslauncher" content-desc="Contacts" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="true" password="false" selected="false" bounds="[48,368][386,544]" /><node index="6" text="Drive" resource-id="com.google.android.apps.nexuslauncher:id/icon" class="android.widget.TextView" package="com.google.android.apps.nexuslauncher" content-desc="Drive" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="true" password="false" selected="false" bounds="[386,368][723,544]" /><node index="7" text="Files" resource-id="com.google.android.apps.nexuslauncher:id/icon" class="android.widget.TextView" package="com.google.android.apps.nexuslauncher" content-desc="Files" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="true" password="false" selected="false" bounds="[723,368][1061,544]" /><node index="8" text="Gmail" resource-id="com.google.android.apps.nexuslauncher:id/icon" class="android.widget.TextView" package="com.google.android.apps.nexuslauncher" content-desc="Gmail" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="true" password="false" selected="false" bounds="[1061,368][1398,544]" /><node index="9" text="Google" resource-id="com.google.android.apps.nexuslauncher:id/icon" class="android.widget.TextView" package="com.google.android.apps.nexuslauncher" content-desc="Google" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="true" password="false" selected="false" bounds="[1398,368][1736,544]" /><node index="10" text="Maps" resource-id="com.google.android.apps.nexuslauncher:id/icon" class="android.widget.TextView" package="com.google.android.apps.nexuslauncher" content-desc="Maps" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="true" password="false" selected="false" bounds="[48,544][386,720]" /><node index="11" text="Messages" resource-id="com.google.android.apps.nexuslauncher:id/icon" class="android.widget.TextView" package="com.google.android.apps.nexuslauncher" content-desc="Messages" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="true" password="false" selected="false" bounds="[386,544][723,720]" /><node index="12" text="Phone" resource-id="com.google.android.apps.nexuslauncher:id/icon" class="android.widget.TextView" package="com.google.android.apps.nexuslauncher" content-desc="Phone" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="true" password="false" selected="false" bounds="[723,544][1061,720]" /><node index="13" text="Photos" resource-id="com.google.android.apps.nexuslauncher:id/icon" class="android.widget.TextView" package="com.google.android.apps.nexuslauncher" content-desc="Photos" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="true" password="false" selected="false" bounds="[1061,544][1398,720]" /><node index="14" text="Play Movies &amp; TV" resource-id="com.google.android.apps.nexuslauncher:id/icon" class="android.widget.TextView" package="com.google.android.apps.nexuslauncher" content-desc="Play Movies &amp; TV" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="true" password="false" selected="false" bounds="[1398,544][1736,720]" /><node index="15" text="Play Music" resource-id="com.google.android.apps.nexuslauncher:id/icon" class="android.widget.TextView" package="com.google.android.apps.nexuslauncher" content-desc="Play Music" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="true" password="false" selected="false" bounds="[48,720][386,896]" /><node index="16" text="Settings" resource-id="com.google.android.apps.nexuslauncher:id/icon" class="android.widget.TextView" package="com.google.android.apps.nexuslauncher" content-desc="Settings" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="true" password="false" selected="false" bounds="[386,720][723,896]" /><node index="17" text="YouTube" resource-id="com.google.android.apps.nexuslauncher:id/icon" class="android.widget.TextView" package="com.google.android.apps.nexuslauncher" content-desc="YouTube" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="true" password="false" selected="false" bounds="[723,720][1061,896]" /></node><node index="1" text="" resource-id="com.google.android.apps.nexuslauncher:id/all_apps_header" class="android.widget.LinearLayout" package="com.google.android.apps.nexuslauncher" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[48,120][1736,192]" /><node index="2" text="" resource-id="com.google.android.apps.nexuslauncher:id/search_container_all_apps" class="android.widget.FrameLayout" package="com.google.android.apps.nexuslauncher" content-desc="Search" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="true" password="false" selected="false" bounds="[156,68][1627,180]"><node index="0" text="" resource-id="com.google.android.apps.nexuslauncher:id/g_icon" class="android.widget.ImageView" package="com.google.android.apps.nexuslauncher" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[192,100][240,148]" /><node index="2" text="" resource-id="com.google.android.apps.nexuslauncher:id/mic_icon" class="android.view.View" package="com.google.android.apps.nexuslauncher" content-desc="Voice search" checkable="false" checked="false" clickable="true" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[1503,68][1615,180]" /></node><node index="4" text="" resource-id="com.google.android.apps.nexuslauncher:id/fast_scroller" class="android.view.View" package="com.google.android.apps.nexuslauncher" content-desc="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" selected="false" bounds="[1672,120][1788,1104]" /></node></node></node></node></node></node></hierarchy>

求助各位道友,给个算法用xml.etree.ElementTree来把日历同级的节点都拿出来。

以上是 xml同级节点如何一次性取出来 的全部内容, 来源链接: utcz.com/a/165328.html

回到顶部