跳到主要内容

查找控件 (Node.find)

Node.find

声明

child_node = node:find(selector)

参数

参数类型是否必填说明
selectorSelector控件选择器

返回值

类型说明
Node控件对象,未找到返回 nil

说明

在当前控件的子树中继续查找,返回满足条件的第一个控件。

工作原理:

  • 以当前控件为根节点,在其所有子孙控件中进行查找
  • 查找范围仅限于当前控件的子树,不会查找兄弟或父级控件
  • 返回第一个匹配的控件,如需全部匹配请使用 find_all()

适用场景:

  • 在容器控件中查找特定子控件
  • 缩小查找范围,提高查找效率
  • 避免全局查找时匹配到其他相似控件

与全局查找的区别:

  • node.selector():find() - 在整个界面查找
  • n:find(selector) - 仅在控件 n 的子树中查找

注意事项:

  • 传入的 selector 不需要再调用 find(),会自动执行查找
  • 如果当前控件没有子控件,返回 nil
  • 查找性能优于全局查找,建议先定位到父容器再查找子控件
待实现

该接口正在开发中。

示例

local node = require("node")

local n = node.selector():id("com.example:id/container"):type("FrameLayout"):find()

if n then
-- 在 n 控件中查找它的倒数第一个子控件
local nchild = n:find(node.selector():child(-1))
if nchild then
print(nchild)
end
end

AScript 对应

# AScript (Python)
from ascript.android.node import Selector

node = Selector().id("com.aojoy.airscript:id/search_query_section").type("FrameLayout").find()
if node:
nchild = node.find(Selector().child(-1))
if nchild:
print(nchild)