滑动分页使用指导

← 返回滑动分页组件参考 · 全部使用指导

滑动分页使用指导

滑动分页把几个布局当作几个页面,用户左右滑动或点标签切换。一个组件覆盖四种常见界面:

标签样式 效果 典型场景
top 顶部标签栏(默认) 页面上方一排标签,选中项下方有指示线,可加红色角标 首页「推荐 / 关注 / 热门」、消息「全部 / 未读」
left 左侧分类栏 左边一列分类、右边是内容,只能点选不能滑动 电商分类页、菜单分类
dots 底部圆点 页面下方一排小圆点标出当前页 新手引导页、图文介绍
none 不显示标签 只有页面,靠滑动或代码切换 配合导航条、按钮自己做切换

和相近组件的区别:

组件 区别
导航条 只有一条导航栏,不带页面;做屏幕最底部的「首页 / 我的」导航用它,可与滑动分页联动(见案例五)
图片轮播 每页只是一张图片,可自动播放;滑动分页的每页是任意布局
滑动菜单 从屏幕边缘滑出一个面板(弹窗、侧边抽屉),不是分页

工作原理

  • 页面就是布局:在设计器里搭好几个布局(垂直布局、垂直滚动条布局等),屏幕初始化时用 添加页面(布局,标题)(AddPage)依次放进分页。布局会从屏幕原来的位置挪进分页里, 并自动变为可见;布局里的组件照常使用,事件、属性都不变。
  • 页面序号从 1 开始:当前页(CurrentPage)、设置角标(索引,文本)(SetBadge)、 切换时(索引,标题)(PageChanged)事件里的序号都是第几页,与添加的先后顺序一致。
  • 添加第一页时不触发「切换时」:第一页加进来就直接显示。首页的初始化(比如加载数据)写在添加页面的代码后面, 不要只依赖「切换时」事件。
  • 所有页面常驻:切走的页面不会被销毁,回来时输入框的内容、滚动位置都还在。
  • 尺寸:组件默认宽度充满、高度 180 像素。标签栏占去一部分(顶部标签栏高约 44、左侧分类栏宽约 96、 底部圆点区高约 24),页面填满剩下的区域,内容超出会被截断。做整屏的标签页时把高度设为「充满」, 内容长的页面用垂直滚动条布局当页面(见案例四)。
  • 标签多了可以横向滑动:顶部标签按文字宽度排列,放不下时标签栏本身可以左右滑动;左侧分类栏放不下时可以上下滑动。

设计器显示的是“示意页面”,不会自动成为运行时页面;必须调用 AddPage。屏幕可滚动且高度为自动时,内容区按页面高度测量,至少保留 136 像素,再加标签栏或圆点区域。

快速上手

  1. 拖一个滑动分页到屏幕,把它的高度设为「充满」;
  2. 拖三个垂直布局,分别改名 垂直布局_推荐、垂直布局_关注、垂直布局_热门, 取消勾选「可见」(否则打开屏幕时会先在原位置闪一下),每个里面放一个标签写上页面内容;
  3. 搭下面的代码块:
when Screen1.Initialize() {
  滑动分页1.AddPage(垂直布局_推荐, "推荐")
  滑动分页1.AddPage(垂直布局_关注, "关注")
  滑动分页1.AddPage(垂直布局_热门, "热门")
}

运行后左右滑动,或点顶部的「推荐 / 关注 / 热门」切换页面。

案例一:首页标签页 + 未读角标

「关注」页有新内容时在标签上显示红色角标,切到这一页后清除。未读数超过 99 显示「99+」:

global 关注未读 = 0

when Screen1.Initialize() {
  滑动分页1.AddPage(垂直布局_推荐, "推荐")
  滑动分页1.AddPage(垂直布局_关注, "关注")
  滑动分页1.AddPage(垂直布局_热门, "热门")
  关注未读 = 5
  显示关注角标()
}

procedure 显示关注角标() {
  if 关注未读 == 0 {
    滑动分页1.SetBadge(2, "")
  } else if 关注未读 > 99 {
    滑动分页1.SetBadge(2, "99+")
  } else {
    滑动分页1.SetBadge(2, 关注未读)
  }
}

when 按钮_模拟新消息.Click() {
  关注未读 = 关注未读 + 1
  显示关注角标()
}

when 滑动分页1.PageChanged(索引, 标题) {
  标签_状态.Text = join("正在看:", 标题)
  if 索引 == 2 {
    关注未读 = 0
    显示关注角标()
  }
}

要点:

  • 角标文字可以是数字,也可以是「新」「热」这样的短字;传空文本清除;
  • 切换时(索引,标题)(PageChanged)事件的两个参数:第几页、这一页的标题, 滑动、点标签、代码设置当前页(CurrentPage)都会触发;
  • 标题也能在运行时改,比如在标题里带上数量:滑动分页1.SetPageTitle(2, join("关注(", 关注未读, ")"))。

案例二:新手引导页(只在第一次打开时显示)

标签样式(TabStyle)选 dots,页面下方显示圆点。设计器里准备:

  • 滑动分页的高度设为「充满」、标签样式(TabStyle)选「圆点」;
  • 三个垂直布局 垂直布局_第一页、垂直布局_第二页、垂直布局_第三页(取消勾选「可见」),每页放一张图片和一段说明;
  • 前两页各放一个「下一页」按钮(按钮_下一页1、按钮_下一页2),第三页放一个 按钮_开始使用;
  • 屏幕顶部放一个 按钮_跳过,再拖一个微数据库记住是否看过引导。
when Screen1.Initialize() {
  if 微数据库1.GetValue("看过引导", false) {
    openAnotherScreen("Screen2")
  } else {
    滑动分页1.AddPage(垂直布局_第一页, "")
    滑动分页1.AddPage(垂直布局_第二页, "")
    滑动分页1.AddPage(垂直布局_第三页, "")
  }
}

when 按钮_下一页1.Click() {
  滑动分页1.CurrentPage = 2
}

when 按钮_下一页2.Click() {
  滑动分页1.CurrentPage = 3
}

when 滑动分页1.PageChanged(索引, 标题) {
  按钮_跳过.Visible = 索引 < 滑动分页1.PageCount
}

when 按钮_开始使用.Click() {
  微数据库1.StoreValue("看过引导", true)
  openAnotherScreen("Screen2")
}

when 按钮_跳过.Click() {
  微数据库1.StoreValue("看过引导", true)
  openAnotherScreen("Screen2")
}

要点:

  • 设置当前页(CurrentPage)会带滑动动画切过去;设成当前页本身或超出范围时什么也不做;
  • 圆点样式下没有标签,页面标题可以传空文本;
  • 最后一页隐藏「跳过」按钮,用的是页面数量(PageCount),以后加减引导页不用改代码。

案例三:电商左侧分类页

标签样式(TabStyle)选 left:左边一列分类,右边是该分类的商品。 这种样式只能点分类切换、不能左右滑动,免得和右边内容里的横向滑动打架。

设计器里:滑动分页高度「充满」、标签样式「左侧」;每个分类一个垂直滚动条布局(商品多时可上下滚动), 里面放商品按钮或列表显示框。

when Screen1.Initialize() {
  滑动分页1.AddPage(垂直滚动条布局_水果, "水果")
  滑动分页1.AddPage(垂直滚动条布局_蔬菜, "蔬菜")
  滑动分页1.AddPage(垂直滚动条布局_肉禽, "肉禽蛋")
  滑动分页1.AddPage(垂直滚动条布局_零食, "零食")
  滑动分页1.SetBadge(4, "新")
  列表显示框_水果.ElementsFromString = "苹果,香蕉,橙子,葡萄,西瓜"
}

when 滑动分页1.PageChanged(索引, 标题) {
  if 索引 == 2 {
    列表显示框_蔬菜.ElementsFromString = "白菜,萝卜,西红柿,黄瓜"
  }
}

when 列表显示框_水果.AfterPicking() {
  标签_已选.Text = join("已选:", 列表显示框_水果.Selection)
}

要点:

  • 第一个分类(水果)在添加完页面后直接加载数据——添加第一页不会触发「切换时」;
  • 其它分类可以在第一次切到时再加载,减少打开屏幕时的等待;
  • 选中的分类左侧有一条竖线并带浅色底,颜色由选中颜色(SelectedColor)决定。

案例四:整屏标签页,页面内容可滚动

页面内容比分页区域高时会被截断——用垂直滚动条布局当页面即可上下滚动:

  1. 滑动分页的高度设为「充满」;
  2. 每个页面用垂直滚动条布局(宽度「充满」),里面放多个标签、图片;
  3. 如果某一页里有横向滚动的内容(横向滚动布局、图片轮播),把可滑动(Swipeable)设为假, 只用点标签切换,避免两种滑动手势冲突。
when Screen1.Initialize() {
  滑动分页1.AddPage(垂直滚动条布局_文章, "文章")
  滑动分页1.AddPage(垂直滚动条布局_评论, "评论")
  滑动分页1.FontSize = 16
  滑动分页1.SelectedColor = &HFFE91E63
}

案例五:与底部导航条联动

做「底部导航 + 左右滑动切页」的 App 骨架:滑动分页负责页面(标签样式(TabStyle)选「无」), 导航条停靠在屏幕底部负责切换。点导航切页、滑页也同步导航选中项:

when Screen1.Initialize() {
  滑动分页1.AddPage(垂直布局_首页, "首页")
  滑动分页1.AddPage(垂直布局_发现, "发现")
  滑动分页1.AddPage(垂直布局_消息, "消息")
  滑动分页1.AddPage(垂直布局_我的, "我的")
}

when 导航条1.ItemSelected(索引) {
  滑动分页1.CurrentPage = 索引
}

when 滑动分页1.PageChanged(索引, 标题) {
  导航条1.SetSelectedItem(索引)
}

两边互相设置不会死循环:设置成当前已经在的那一页时不会再触发事件。

外观定制

属性 作用 默认
标签样式(TabStyle) 顶部 / 左侧 / 圆点 / 无,运行时也可以改 顶部
选中颜色(SelectedColor) 选中标签文字、指示线、当前圆点 蓝色 &HFF2196F3
未选中颜色(UnselectedColor) 其它标签文字 灰色 &HFF757575
标签栏背景颜色(TabBackgroundColor) 顶部或左侧标签栏的底色 白色
字体大小(FontSize) 标签文字字号 15
可滑动(Swipeable) 能否左右滑动切换(左侧样式总是不能滑) 真

角标固定为红底白字的小圆角块。深色主题的页面可以把标签栏背景设为深色、未选中颜色设为浅灰。

常见问题

现象 原因与处理
页面是空的 屏幕初始化时有没有添加页面(布局,标题)(AddPage);页面布局里有没有放组件
打开屏幕时页面内容先在屏幕上闪一下 页面布局在设计器里取消勾选「可见」,添加页面时会自动变为可见
页面下半截显示不全 分页区域不够高:把滑动分页高度设为「充满」,内容长的页面改用垂直滚动条布局
第一页的「切换时」事件没触发 添加第一页时不触发;首页的初始化写在添加页面之后
设置角标、改标题没反应 序号是否超出页面数量(PageCount)(超出时直接忽略);是否先添加了页面
同一个布局加了两次只出现一页 同一个布局不会重复添加
页面里的横向列表和翻页手势打架 把可滑动(Swipeable)设为假,只用点标签切换
左侧分类样式不能左右滑 设计如此:避免和右边内容的滑动冲突,点分类切换
想删掉某一页 不支持删除页面;可以把那一页里的内容隐藏,或用改标题提示「暂无内容」
想做屏幕最底部的导航栏 用导航条,可与滑动分页联动(案例五)

平台说明

  • 编译 APK 与鸿蒙 HAP 都支持;
  • 这是新增的内置组件,用 AI 伴侣联机调试时需要更新到包含它的伴侣版本。

完整 .aia 源码与操作指导

下载 .aia 源码

设备应用的三个真实布局页面,包含标签切换、内部滚动、常驻输入、未读角标与运行时第四页。示例计数和消息明确标为本地测试数据;全部页面在初始化实际加入分页,避免仅有设计器示意页。

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

API / 功能 操作入口 预期结果
AddPage、PageCount、设计器 初始化加入设备、消息、我的;点击追加更多 三页真实布局不空白;第四页只追加一次;页数读回
CurrentPage、PageChanged 点标签、左右滑动、合法索引跳转 实际页与标题反馈;首次第一页不依赖切换事件
TabStyle、Swipeable 顶部、左侧、圆点、无标签;开关滑动 左侧只点选,关闭滑动后按钮跳转仍可用;中文选择映射真实内部值
SetBadge、SetPageTitle 增加示例未读、消息页标记已读;修改标题 实际角标出现/消失,标题更改;圆点/无标签时无文字角标展示
SelectedColor、UnselectedColor、TabBackgroundColor、FontSize 切换主题、设置字号并读取 实际颜色和字体变化,全部属性读回
页面常驻、滚动与内部按钮 我的页改昵称切走回来;消息页内部滚动;点设备操作 页面内容保持,计数来自本地按钮,不伪造硬件数据
Visible、Left、Top、Width、Height、WidthPercent、HeightPercent 下方控制区隐藏恢复、尺寸按钮 目标独立尺寸,页面填满其内容区,控制可恢复

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

设备应用滑动分页

导入方法:项目 → 导入项目(.aia)→ 选择下载的 .aia 源码文件。 设备应用的三个真实布局页面,包含标签切换、内部滚动、常驻输入、未读角标与运行时第四页。示例计数和消息明确标为本地测试数据;全部页面在初始化实际加入分页,避免仅有设计器示意页。 覆盖检查 40/40。首次载入及保存重开均0个错误,真实后台导入、安装包编译通过;真机/伴侣/硬件联调尚未实测。全部属性读写、方法与事件的操作入口和预期结果见组件指导。

文档反馈