查找控件 (Node.find)
Node.find
声明
child_node = node:find(selector)
参数
| 参数 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| selector | Selector | 是 | 控件选择器 |
返回值
| 类型 | 说明 |
|---|---|
| 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)