多图选择器使用指导

← 返回多图选择器组件参考 · 全部使用指导

多图选择器使用指导

多图选择器打开系统相册,让用户选一张或多张图片。和按钮形态的「图像选择器」相比: 它是不可见组件,可以由任何按钮、图片触发;支持一次选多张,还能限制最多选几张。

工作原理

图片保留规则(重要):这个目录只保留最近选的 10 张(一次多选超过 10 张时保留这一批), 更早选过的图片会被自动删掉。需要长期保存的图片,请用图片处理处理一下 (结果另存到它自己的目录)或用文件增强复制到别处。

快速上手

when 按钮_选图.Click() {
  多图选择器1.MultiplePick(9)
}

when 多图选择器1.AfterMultiplePick(路径列表) {
  标签1.Text = join("选中 ", length(路径列表), " 张")
  图像1.Picture = select(路径列表, 1)
}

案例一:发帖选图,显示前三张缩略图

最多选 9 张,界面上用三个图像组件预览前三张,其余显示「+N」:

global 已选 = []

when 按钮_加图.Click() {
  多图选择器1.MultiplePick(9)
}

when 多图选择器1.AfterMultiplePick(路径列表) {
  已选 = 路径列表
  图像_1.Picture = select(已选, 1)
  if length(已选) >= 2 {
    图像_2.Picture = select(已选, 2)
  }
  if length(已选) >= 3 {
    图像_3.Picture = select(已选, 3)
  }
  if length(已选) > 3 {
    标签_更多.Text = join("+", length(已选) - 3)
  } else {
    标签_更多.Text = ""
  }
}

案例二:逐张上传多张图片

Web 组件一次只能发一个请求:上传完一张(收到响应)再传下一张,每张先压缩:

global 待传 = []
global 序号 = 0

when 多图选择器1.AfterMultiplePick(路径列表) {
  待传 = 路径列表
  序号 = 1
  上传当前()
}

procedure 上传当前() {
  标签_状态.Text = join("正在上传第 ", 序号, " / ", length(待传), " 张")
  Web1.Url = "https://example.com/upload"
  Web1.PostFile(图片处理1.Compress(select(待传, 序号), 1080, 80))
}

when Web1.GotText(URL网址, 响应代码, 响应类型, 响应内容) {
  if 序号 < length(待传) {
    序号 = 序号 + 1
    上传当前()
  } else {
    标签_状态.Text = "全部上传完成"
  }
}

案例三:选一张图做头像

单选后裁成圆形头像,并记住它的路径(处理后的图片不受上面的保留规则影响):

when 图像_头像.Click() {
  多图选择器1.SinglePick()
}

when 多图选择器1.AfterSinglePick(路径) {
  图像_头像.Picture = 图片处理1.Resize(图片处理1.CropCircle(路径), 300, 300)
  微数据库1.StoreValue("头像", 图像_头像.Picture)
}

when Screen1.Initialize() {
  图像_头像.Picture = 微数据库1.GetValue("头像", "")
}

案例四:处理取消与出错

when 多图选择器1.PickerCancelled(操作) {
  标签_状态.Text = "没有选择图片"
}

when 多图选择器1.ErrorOccurred(操作, 消息) {
  标签_状态.Text = join("选图失败:", 消息)
}

只选某种格式

MIME过滤(MimeFilter)默认 image/*(所有图片)。只要 PNG 就填 image/png, 只要 JPEG 填 image/jpeg。单选和多选都使用这个过滤条件。

常见问题

现象 原因与处理
之前选的图片不见了 目录只保留最近 10 张;需要长期保存的先用图片处理或文件增强另存
能选的数量超过了限制 部分系统选择器不支持数量上限,组件会只取前面的几张
多选按钮没出现 部分老旧系统的选择器只支持单选
上传多张只成功一张 同一个 Web 组件要等上一张返回再传下一张(案例二)

平台说明

  • 安卓:支持;
  • 鸿蒙:使用系统图库选择器(不需要相册权限),单选、多选、取消与出错事件和安卓一致;「图片类型」填 video/* 时选视频,/ 时图片视频都可选。

完整 .aia 源码与操作指导

下载 .aia 源码

相册头像和发帖多选的完整交互:MIME过滤、数量校验、真实路径预览、逐张翻页,以及取消和失败反馈。系统相册需已有照片,本案例不上传数据。

导入 MultiImagePickerAllFeatures.aia,连接最新伴侣,或编译独立安装包。真机/伴侣运行尚未实测。

API / 功能 操作入口 预期结果
MimeFilter及设计器 应用image/*、JPEG、PNG;读属性;查看设计器 系统按类型过滤,库中无该格式可能为空;不代表组件故障
SinglePick、AfterSinglePick 单选系统相册图片 显示实际返回路径与图片,完成计数增加
MultiplePick、AfterMultiplePick 上限9多选;测试上限1、空值和非数字 仅有效整数打开;真实列表数量,可翻页逐张预览
PickerCancelled 打开后用系统返回取消 显示具体取消操作,先前图片保留
ErrorOccurred 系统选择器打不开或复制失败 真实失败显示操作和消息;没有按钮伪造事件
空列表、前后边界 未选时翻页;第一张向前、最后向后 不访问索引0或越界;空列表无预览
重复选择、清空 重选照片;清空后再选 新批次替换预览,清空不删文件

所有返回值均用于界面反馈,错误由底部错误区展示。设计器采用明确非默认配置,初始化与界面同步。API 覆盖检查按最终 AIA 检查方法、事件、属性读取与设置及设计器配置,不能替代真实设备验证。

相册单选与多选

导入方法:项目 → 导入项目(.aia)→ 选择下载的 .aia 源码文件。 相册头像和发帖多选的完整交互:MIME过滤、数量校验、真实路径预览、逐张翻页,以及取消和失败反馈。系统相册需已有照片,本案例不上传数据。 覆盖检查 9/9。首次载入及保存重开均0个错误,真实后台导入、安装包编译通过;真机/伴侣/硬件联调尚未实测。全部属性读写、方法与事件的操作入口和预期结果见组件指导。

第一次测试

先在手机系统相册拍一张照片或存入JPEG/PNG图片,确认系统相册能看到。伴侣连接后点击“选择一张头像”,在系统界面选择照片;多选完成用前一张、后一张查看每个真实路径对应图片。切换类型后要点击应用过滤。

选图文件位于应用目录,组件只保留最近10张(单批超过10张时保留该批)。本页清空只清空变量,不删除文件;长期使用应另存,不把老路径永久当成有效资源。部分系统界面不支持数量上限,组件截取前面的图片。错误事件只能由真实失败触发,取消使用正常系统返回键验证。

文档反馈