获取子控件 (Selector.child)
Selector.child
声明
node.selector():child()
node.selector():child(val)
node.selector():child(val1, val2, ...)
参数
| 参数 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| val | number | 否 | 获取第 val 个子控件。默认获取所有孩子。(1)=第1个孩子,(-1)=倒数第1个孩子,(1.3)=1-3之间所有孩子,(-1.3)=倒数1-3之间所有孩子,(1,3)=第1个和第3个子控件 |
返回值
| 类型 | 说明 |
|---|---|
| Selector | 返回控件查找器,用于链式编程 |
说明
添加子控件层级约束,用于在查找后获取匹配控件的子控件。
工作原理:
- 先根据其他约束找到目标控件
- 然后返回目标控件的指定位置子控件
- 支持灵活的参数格式获取不同位置的子控件
参数格式详解:
- 无参数
child()- 获取所有子控件 child(1)- 获取第1个子控件child(-1)- 获取最后1个子控件child(1, 3)- 获取第1个和第3个子控件child(1.3)- 获取第1到第3个子控件(范围)child(-1.3)- 获取倒数第1到第3个子控件
适用场景:
- 从容器控件获取内部元素
- 按索引定位列表项中的特定子控件
- 获取布局中的第一个或最后一个元素
与 Node.child() 的区别:
selector:child()- 是选择器的约束方法,用于查找时n:child()- 是控件对象的方法,对已找到的控件操作
注意事项:
- 索引从 1 开始,负数表示从末尾计数
- 仅获取直接子控件,不包括孙子控件
- 范围语法使用小数点(如
1.3表示 1 到 3)
待实现
该接口正在开发中。
示例
local node = require("node")
-- 获取所有孩子
local nodes = node.selector():id("com.example:id/container"):child():find_all()
-- 获取第一个孩子
local nodes = node.selector():id("com.example:id/container"):child(1):find_all()
-- 获取第1和第2个孩子
local nodes = node.selector():id("com.example:id/container"):child(1, 2):find_all()
-- 获取第1-3个孩子
local nodes = node.selector():id("com.example:id/container"):child(1.3):find_all()
-- 获取倒数第一个孩子
local nodes = node.selector():id("com.example:id/container"):child(-1):find_all()
-- 获取倒数第1-3个孩子
local nodes = node.selector():id("com.example:id/container"):child(-1.3):find_all()
if nodes then
for _, node in ipairs(nodes) do
print(node.type)
end
end
AScript 对应
# AScript (Python)
from ascript.android.node import Selector
nodes = Selector().id("com.aojoy.airscript:id/search_query_section").child().find_all()
nodes = Selector().id("com.aojoy.airscript:id/search_query_section").child(1).find_all()
nodes = Selector().id("com.aojoy.airscript:id/search_query_section").child(-1).find_all()