跳到主要内容

获取子控件 (Selector.child)

Selector.child

声明

node.selector():child()
node.selector():child(val)
node.selector():child(val1, val2, ...)

参数

参数类型是否必填说明
valnumber获取第 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()